gpt4 book ai didi

plsql - 使用带有绑定(bind)变量的 Execute Immediate 语句时出现无效的表名错误

转载 作者:行者123 更新时间:2023-12-04 18:15:01 27 4
gpt4 key购买 nike

我试图让这个动态 SQL 运行(使用 EXECUTE IMMEDIATE)

M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 from :m_var2 RETURNING MAX(:m_var1)+1 INTO :m_var3';

EXECUTE IMMEDIATE M_SQL_STATEMENT
USING M_COLUMN_NAME, UPPER(P_TABLE_NAME), M_COLUMN_NAME
RETURNING INTO M_SEQ_NUMBER;

但是,当尝试运行它时,我一直遇到
ORA-00903: Invalid table

P_TABLE_NAME 是一个被接受为输入的表名。我已经确认表名和列名是有效的。我无法弄清楚为什么 Oracle 会抛出错误。

FWIW 将 SQL 语句更改为
M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 SEQ from :m_var2 RETURNING SEQ INTO :m_var3';

仍然导致相同的错误。

最佳答案

您需要将表名和列名放入动态 SQL 中,因此类似于

M_SQL_STATEMENT := 'SELECT MAX(' || M_COLUMN_NAME || ')+1 from ' 
|| P_TABLE_NAME';

EXECUTE IMMEDIATE M_SQL_STATEMENT INTO M_SEQ_NUMBER;

关于plsql - 使用带有绑定(bind)变量的 Execute Immediate 语句时出现无效的表名错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5259690/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com