gpt4 book ai didi

sql - PL/SQL - 动态 sql 格式以文字 varchar 形式出现

转载 作者:搜寻专家 更新时间:2023-10-30 22:19:23 24 4
gpt4 key购买 nike

我有一个引用表,其中存储了各种列,其中包含每条记录的值,例如LPAD(pl_sql_variablex10)

想法是表中的数据(即填充数可以从 10 更改为 15,或更改相关变量)可以更改,而无需更改任何 PL/SQL。

我有一个光标在移动

    CURSOR C IS SELECT columna, columnb, columnc, columnd
FROM REFerence
ORDER BY FIELDORDER;

然后我想打印出格式化的字符串,但使用我当前的语法,它按字面意思打印文本“LPAD”,而不是实际填充值

  FOR R IN C LOOP
UTL_FILE.PUT(FILEP, R.COLUMNA||R.COLUMNb||','||
R.COLUMNc||','||R.COLUMND);
dbms_output.put_line(R.COLUMNA||R.COLUMNb||','||
R.COLUMNc||','||R.COLUMND);
END LOOP;

最佳答案

您可以使用立即执行(为简洁起见,我已将您的显式光标替换为隐式光标):

create table reference(
columna varchar2(100),
columnb varchar2(100),
columnc varchar2(100),
columnd varchar2(100));

insert into reference(columna, columnb, columnc, columnd)
values(':x', 'lpad(:x, 5, ''_'')', 'trim(:x)', 'substr(:x, 1, 5)');

declare
a varchar2(100);
b varchar2(100);
c varchar2(100);
d varchar2(100);
l_SQL varchar2(4000);
inval varchar2(100) default ' hello world ';
begin
for cur in (select * from reference)
loop
l_SQL := 'select ' || cur.columna || ',' || cur.columnb ||',' || cur.columnc || ',' || cur.columnd || ' from dual';
dbms_output.put_line(l_SQL);
execute immediate l_SQL into a,b,c,d using inval, inval, inval, inval;
dbms_output.put_line(a);
dbms_output.put_line(b);
dbms_output.put_line(c);
dbms_output.put_line(d);
end loop;
end;

当然,您必须注意 SQL 注入(inject)攻击、无效 SQL 语句等。

关于sql - PL/SQL - 动态 sql 格式以文字 varchar 形式出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com