2015-02-11 88 views
1

運行此查詢的SQL開發者:dbms_out返回第1列:PLS-00428:一個INTO子句中的SELECT語句預計

SET SERVEROUTPUT ON 
BEGIN 

DBMS_OUTPUT.PUT_LINE ('schema > table > key '); 
SELECT 'table_name' TABLE_NAME , t.* FROM table_name t ; 

END ; 

我得到這個消息:

Error report - 
ORA-06550: line 4, column 1: PLS-00428: an INTO clause is expected in 
this SELECT statement 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 

而當我一個接一個地運行這兩個語句,它工作正常。 那麼爲什麼我會得到錯誤以及如何避免它?

千恩萬謝,

+3

您必須使用plsql中的'INTO'子句來存儲提取的值,通過選擇 – Aramillo 2015-02-11 14:25:16

+5

'PL/SQL'不是一種腳本語言,它與'SQL'不同。當你在'PL/SQL'中運行一個查詢時,你不能指望它像這樣在你的控制檯中打印結果。與JDBC一樣,您必須將這些數據提供給「PL/SQL」變量,然後使用「DBMS_OUTPUT」包打印它。當你在沒有SELECT的情況下運行PL/SQL時,它的工作原理是,它沒有嵌入任何SQL。另外,當你單獨運行一個SQL時,你的IDE不會像PL/SQL那樣執行它,一個'SQL'只。最後,您試圖合併它們,現在PL/SQL中的SQL必須像我之前提到的那樣處理。 – 2015-02-11 14:37:59

+0

還值得注意的是,PL/SQL錯誤的行號(本例中爲PLS-00428)是指內部的行PL/SQL代碼,而不是整個腳本,因爲您可能習慣在工作表中運行普通SQL。所以從'BEGIN'塊的開始處開始,第4行是'select',而不是'dbms_output'。至少在標題中似乎讓你感到困惑。 (在觸發器創建語句中它更令人困惑)。 – 2015-02-11 14:58:12

回答

3

你混淆SQL和PL/SQL語句,正如評論中所解釋的。你可以選擇一些東西,但是你可以得到一行數據,或者選擇一個集合,然後像Aramillo所說的那樣手動迭代。

可以使用'cursor for-loop'遍歷你行,而不是:

SET SERVEROUTPUT ON 
BEGIN 
    DBMS_OUTPUT.PUT_LINE ('schema > table > key '); 
    FOR rec IN (SELECT 'table_name' TABLE_NAME , t.* FROM table_name t) 
    LOOP 
    DBMS_OUTPUT.PUT_LINE (rec.COLUMN_NAME1||','||rec.COLUMN_NAME2); 
    END LOOP; 
END; 
/

但考慮到你的出發點是簡單的離開查詢作爲計劃SQL和後擋運行:

SET SERVEROUTPUT ON 
BEGIN 
    DBMS_OUTPUT.PUT_LINE ('schema > table > key '); 
END; 
/
SELECT 'table_name' TABLE_NAME , t.* FROM table_name t; 

或在SQL * Plus或SQL Developer中,使用客戶端prompt command而不是dbms_output

prompt schema > table > key 
SELECT 'table_name' TABLE_NAME , t.* FROM table_name t; 
3

例如,如果要打印的列的表COLUMN_NAME,你可以做財產以後這樣的:

DECLARE 
TYPE TABLE_OBJ IS TABLE OF TABLE_NAME%ROWTYPE; 
TABLE_T TABLE_OBJ; 
BEGIN 
SELECT * BULK COLLECT INTO TABLE_T FROM TABLE_NAME; 

FOR i IN 1..TABLE_T.COUNT LOOP 
    DBMS_OUTPUT.PUT_LINE(TABLE_T(i).COLUMN_NAME1||','||TABLE_T(i).COLUMN_NAME2); 
END LOOP; 

END; 
+0

謝謝,但它不工作: – user3752281 2015-02-11 16:26:45

+0

好的,我在那裏添加了索引 – user3752281 2015-02-11 16:30:29

+0

這是我現在得到的錯誤報告:錯誤報告 - ORA-06550:第7行,第17列: PLS-00642:本地集合類型SQL語句中不允許 ORA-06550:第7行,第25列: PL/SQL:ORA-00947:值不足 ORA-06550:第7行第3列: PL/SQL:SQL語句被忽略 06550。 00000 - 「行%s,列%s:\ n%s」 *原因:通常是PL/SQL編譯錯誤。 – user3752281 2015-02-11 16:31:06