Oracle PL/SQL:使用循环修改变量并返回结果

mf98qq94  于 2023-11-17  发布在  Oracle
关注(0)|答案(2)|浏览(166)

假设我有一张虚拟的table。

create table dummy_table as
select 'A' letter from dual
union all
select 'B' letter from dual;

字符串
.并需要将letter列中的所有值连接到一个clob变量中,每个值都从一个新行开始。
我一直在尝试沿着这些路线,但它不工作,因为我的PL/SQL的知识是不幸的有限。下面的代码是不工作,但传达的想法。

var my_text clob; -- def? define? declare?

begin
 for c in ( select letter from dummy_table ) 
  loop
    my_text := my_text  || c.letter || chr(10);
  end loop;
end;


最后,需要能够输出结果

print(my_text); -- dbms_output.put_line(my_text)? dbms_sql.return_result(my_text)?


虽然它说PL/SQL procedure successfully completed.,但打印my_value会返回一个空变量。
使用SQL Developer和Oracle 19 c。

u2nhd7ah

u2nhd7ah1#

VARVARIABLE的缩写,是一个SQLPlus命令,它定义了在客户端应用程序(即SQLPlus、SQL Developer或SQLcl)中使用的绑定变量。它不是PL/SQL命令。同样,PRINT是一个SQL*Plus命令,不是SQL或PL/SQL语言的一部分。
如果你想使用一个绑定变量,那么当你在SQL或PL/SQL中使用它时,你需要用:作为前缀。

VARIABLE my_text clob;

BEGIN
  FOR c IN (SELECT letter FROM dummy_table) 
  LOOP
    :my_text := :my_text  || c.letter || chr(10);
  END LOOP;
END;
/

PRINT my_text;

-- or

BEGIN
  DBMS_OUTPUT.PUT_LINE(:my_text);
END;
/

字符串
但是,如果你想在PL/SQL块中执行它(并且不使用基于客户端的绑定变量),那么DECLARE一个局部变量并使用它:

DECLARE
  my_text CLOB;
BEGIN
  DBMS_OUTPUT.ENABLE();

  FOR c IN (SELECT letter FROM dummy_table) 
  LOOP
    my_text := my_text  || c.letter || chr(10);
  END LOOP;

  DBMS_OUTPUT.PUT_LINE(my_text);
END;
/

vwoqyblh

vwoqyblh2#

一种选择是创建一个返回clob的函数,并使用dbms_output显示结果:

koen 19c > create table dummy_table as
  2  select 'A' letter from dual
  3  union all
  4* select 'B' letter from dual;

Table DUMMY_TABLE created.

koen 19c > create or replace function print_concatenated_text return clob as 
  2    l_my_text clob; 
  3  begin
  4   for c in ( select letter from dummy_table ) 
  5    loop
  6      l_my_text := l_my_text  || c.letter || chr(10);
  7    end loop;
  8    return l_my_text;
  9  end print_concatenated_text;
 10* /

Function PRINT_CONCATENATED_TEXT compiled

koen 19c > set serveroutput on
koen 19c > begin 
  2     dbms_output.put_line(print_concatenated_text);
  3  end;
  4* /
A
B


PL/SQL procedure successfully completed.

字符串

相关问题