立即执行的问题

发布于 2024-09-29 02:33:32 字数 399 浏览 5 评论 0原文

我尝试使用“立即执行”运行下面的代码,但它不起作用并且值是正确的。

请建议正确的代码。

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'='
               ||v_val||' where CONCURRENT_PROGRAM_SHORT_NAME= '||v_conc_name;

end;  

I am trying to run this code below using Execute Immediate but its not working and values are correct.

Please suggest the correct code.

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'='
               ||v_val||' where CONCURRENT_PROGRAM_SHORT_NAME= '||v_conc_name;

end;  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

自此以后,行同陌路 2024-10-06 02:33:32

使用绑定变量要容易得多(也是更好的做法):

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'=:bv_val
               where CONCURRENT_PROGRAM_SHORT_NAME=:bv_conc_name'
  USING v_val, v_conc_name;

end;  

使用字符串变量来保存 SQL 也是一种方便的做法。然后可以使用DBMS_OUTPUT.PUT_LINE来查看和验证:

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
v_sql LONG;
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
v_sql := 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'=:bv_val
               where CONCURRENT_PROGRAM_SHORT_NAME=:bv_conc_name';
EXECUTE IMMEDIATE v_sql USING v_val, v_conc_name;

end; 

It's a lot easier (and better practice) to use bind variables:

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'=:bv_val
               where CONCURRENT_PROGRAM_SHORT_NAME=:bv_conc_name'
  USING v_val, v_conc_name;

end;  

It's also a handy practice to use a string variable to hold the SQL. Then you can use DBMS_OUTPUT.PUT_LINE to view and verify it:

declare
v_count number:=1;
v_conc_name varchar2(400);
v_val VARCHAR2(20):='vineet';
v_sql LONG;
BEGIN 
v_conc_name:='INT_AP_PAY_CONV';
v_sql := 'UPDATE xxx_cnc_prg_details
               SET
               PARAMETER'||v_count||'=:bv_val
               where CONCURRENT_PROGRAM_SHORT_NAME=:bv_conc_name';
EXECUTE IMMEDIATE v_sql USING v_val, v_conc_name;

end; 
猫瑾少女 2024-10-06 02:33:32

似乎您错过了引号:

应该是:

 ||' where CONCURRENT_PROGRAM_SHORT_NAME= '''||v_conc_name || '''';

因为 v_conc_name 是 varchar2

Seems you missed quotes:

should be:

 ||' where CONCURRENT_PROGRAM_SHORT_NAME= '''||v_conc_name || '''';

because v_conc_name is varchar2

二货你真萌 2024-10-06 02:33:32

我会这样做:

DECLARE
  c           CONSTANT CHAR := '''';
  v_conc_name VARCHAR2(400) := 'INT_AP_PAY_CONV';
  v_val       VARCHAR2(20)  := 'vineet';
  v_count     NUMBER        := 1;
BEGIN
  EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
                     SET
                     PARAMETER'||v_count||' = '||c||v_val||c||'
                     where CONCURRENT_PROGRAM_SHORT_NAME = '||c||v_conc_name||c;

END; 

I would do like this:

DECLARE
  c           CONSTANT CHAR := '''';
  v_conc_name VARCHAR2(400) := 'INT_AP_PAY_CONV';
  v_val       VARCHAR2(20)  := 'vineet';
  v_count     NUMBER        := 1;
BEGIN
  EXECUTE IMMEDIATE 'UPDATE xxx_cnc_prg_details
                     SET
                     PARAMETER'||v_count||' = '||c||v_val||c||'
                     where CONCURRENT_PROGRAM_SHORT_NAME = '||c||v_conc_name||c;

END; 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文