EXECUTE IMMEDIATE 插入多行列
Posted
技术标签:
【中文标题】EXECUTE IMMEDIATE 插入多行列【英文标题】:EXECUTE IMMEDIATE with multiple lines of columns to insert 【发布时间】:2013-01-18 15:01:30 【问题描述】:只是想知道这是否是使用多列和多行执行 EXECUTE IMMEDIATE 并将其分配给变量的正确方法?我尝试查看示例,但不确定我是否正确连接了这些行?
sql_stmt VARCHAR2(200);
sql_stmt:='INSERT INTO (STORECODE, TILLID, TRANSACTIONNR, TRADINGDATE, TRANSTYPE, ' ||
'OPERATORCODE TRAININGMODE, VOIDED, VALUEGROSS, VALUENETT, VALUEDUE) ' ||
‘VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10)’;
EXECUTE IMMEDIATE sql_stmt USING sSTORECODE………………………………………..fGROSS_AMOUNT,
‘0’;
【问题讨论】:
【参考方案1】:Oracle 中的字符串可以是多行的。因此,您可以简单地写:
sql_stmt := 'INSERT INTO (STORECODE, TILLID, TRANSACTIONNR, TRADINGDATE,
TRANSTYPE, OPERATORCODE TRAININGMODE, VOIDED,
VALUEGROSS, VALUENETT, VALUEDUE)
VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10)';
EXECUTE IMMEDIATE sql_stmt USING p1, p2... p10;
当然,使用串联 (||
) 和几个子字符串也可以。
【讨论】:
【参考方案2】:set serveroutput on size unlimited;
declare
str_ varchar(1000 char);
date_ date;
begin
--str_ := 'select sysdate' || chr(10);
--str_ := str_ || 'from dual';
str_ := 'select sysdate /* ''comment'' */
from dual';
execute immediate str_
into date_;
dbms_output.put_line(date_);
end;
【讨论】:
以上是关于EXECUTE IMMEDIATE 插入多行列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 EXECUTE IMMEDIATE 中使用动态 where 子句