我正在使用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引用更改变量名称以获取另一个值的子字符串? 谢谢你看这个。