如何使用变量构造Oracle Dynamic SQL

时间:2018-02-16 15:32:41

标签: oracle11g dynamic-sql execute-immediate

我正在使用Oracle 11.g我无法让Dynamic SQL在特定场景中运行。我有一个作者数组,名字和姓氏用一个空格分隔。当我遍历作者数组时,我需要将FN和LN分成两个字段。

declare
l_pls_block                 varchar2(512);
l_curr_author               varchar2(512);
l_curr_author_ln_varname    varchar2(512);
l_curr_author_ln_value      varchar2(512);
BEGIN
For k in 1 .. 3
    loop
        l_curr_author := 'Joe Schmoe';
        l_curr_author_ln_varname := 'l_P133_AUTHOR' || k || '_LAST_NAME';
        l_pls_block := l_curr_author_ln_varname || 
            ' := trim(substr(l_curr_author, (instr(l_curr_author, '' '')+1)))';
        dbms_output.put_line('l_pls_block is: ' || l_pls_block);
        execute immediate l_pls_block;
        dbms_output.put_line('l_P133_AUTHORx_LAST_NAME is: ' || 
            l_curr_author_ln_varname);
    end loop;
end;

上面的代码返回:ORA-00900:无效的SQL语句ORA-06512:在第14行 我已经尝试使用“执行立即l_pls_block到xxxx”但我无法让它工作。作为测试,我构建了声明:

my_test_val := trim(substr(l_curr_author, (instr(l_curr_author, ' ')+1)))';

并且工作正常。 如何使用动态SQL引用更改变量名称以获取另一个值的子字符串? 谢谢你看这个。

0 个答案:

没有答案