PL/SQL保存SELECT的输出并用PUT_LINE显示



我遇到一个问题已经有一段时间了,我真的不知道如何做我想做的事。

考虑到下面的Cursor,我从表中读取了所有ID,其中一列包含变量中的所有值。使用这个光标,我确定了要从表中删除的所有记录。到目前为止还不错。

因为我将从数据库中删除一些行,所以我想首先将受影响的行保存为INSERT INTO格式。为此,我使用";选择/*插入*/*";来自SQL Developer的提示。

不幸的是,我的问题来了。我找不到使用DBMS_Output.PUT_LINE在SCRIPT输出中显示SELECT结果的方法;PL/SQL:ORA-00947:没有足够的值";错误消息。

你们知道我该怎么解决我的问题吗?

我的代码是:

DECLARE CURSOR C2 is 
select my_id from my_table where my_id in (v_id);
BEGIN
for i in C2 LOOP
SELECT my_second_id into v_test from my_table where my_id = i.my_id;
DBMS_OUTPUT.PUT_LINE('A DELETE has to be performed within my_table, for the following ID: '||v_test);
DBMS_OUTPUT.PUT_LINE('                                ');
DBMS_OUTPUT.PUT_LINE('The Backups are as follows: ');
select /*insert*/ * into v_why_does_it_not_work from my_table where my_id = i.my_id;
DBMS_OUTPUT.PUT_LINE(v_why_does_it_not_work);
END LOOP;
END;

我的输出是:

Error report -
ORA-06550: line 30, column 70:
PL/SQL: ORA-00947: not enough values
ORA-06550: line 30, column 37:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

我希望我的输出是这样的:

A DELETE has to be performed within my_table, for the following ID: my_second_id

The Backups are as follows: 
Insert into my_table (col1,col2,col3,col4,col5,col6) values (val1,val2,val3,val4,val5,val6);

这显然是错误的:

DBMS_OUTPUT.PUT_LINE('The Backups are as follows: '
select /*insert*/ * into v_why_does_it_not_work

因为你还没有终止第一行;应该是

DBMS_OUTPUT.PUT_LINE('The Backups are as follows:');
select /*insert*/ * into v_why_does_it_not_work

由于错误本身,Oracle说它在第30行第70列。你发布的代码没有30行,所以我不知道这是错误的还是其他什么。

不过,我建议您避免select *-始终指定您正在使用的所有列。


好吧,抛开打字错误不谈,但那根本不管用。您说过您使用了提示。不,这只是一个评论,不是一个暗示。

此外,如果要创建INSERT INTO语句,则必须使用动态SQL,将其值存储到变量中并显示(使用DBMS_OUTPUT.PUT_LINE(。

或者,考虑将旧的(已删除的(值存储到您自己的审计表中。我们使用数据库触发器来做到这一点。

最新更新