使用连接的命令字符串在过程中执行 sql

Executing sql in procedure with concatenated command string

我这里有这个:

create procedure test_ins(IN tab varchar(128))
Language sql
begin
   DECLARE stmt_ins STATEMENT;
   DECLARE v_query varchar(2048);
   DECLARE test varchar(20);
   DECLARE test_tab varchar(20);
   set test = 'HERE IT IS';
   set test_tab = tab;
   set v_query= 'INSERT INTO '||test_tab||'(test, free) values (test,'''')';
   PREPARE stmt_ins from v_query;
   EXECUTE stmt_ins;

end@

问题是好像运行(没有报错信息)但是table里面什么都没有....

有什么想法吗? 谢谢

您似乎没有使用调试器...试试 IBM Data Studio 中的调试器(免费 download)。

create or replace procedure test_ins(IN tab varchar(128))
Language sql
specific test_ins
begin
    DECLARE v_query varchar(2048);
    DECLARE test varchar(20);
    DECLARE test_tab varchar(20);
    DECLARE stmt_ins STATEMENT;
    set test = 'HERE IT IS';
    set test_tab = tab;
    set v_query= 'INSERT INTO '||test_tab||'(test, free) values (''test'','''')';
    call dbms_output.put_line(v_query);
    PREPARE stmt_ins from v_query;
    EXECUTE stmt_ins;

end@

我认为您需要将测试更改为“||test||”在集合 v_query 中,如下所示:

create procedure test_ins(IN tab varchar(128))
Language sql
begin
   DECLARE stmt_ins STATEMENT;
   DECLARE v_query varchar(2048);
   DECLARE test varchar(20);
   DECLARE test_tab varchar(20);
   set test = 'HERE IT IS';
   set test_tab = tab;
   set v_query= 'INSERT INTO '||test_tab||'(test, free) values ( '''||test||''','''')';
   PREPARE stmt_ins from v_query;
   EXECUTE stmt_ins; 

end@