在sql-developer中运行此查询:
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:
当我一个接一个地运行这两个语句时,它工作正常。 那么为什么我会得到错误以及如何避免错误?
非常感谢,答案 0 :(得分: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;
答案 1 :(得分: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;