Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)
Posted
技术标签:
【中文标题】Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)【英文标题】:Z-ORA-01745: invalid host/bind variable name (PLSQL) 【发布时间】:2018-07-30 09:03:07 【问题描述】:我对 plsql 中的动态变量有点新意。 我在 EXECUTE IMMEDIATE 上收到错误“无效的主机/绑定变量名” 陈述。提前致谢。
CREATE OR REPLACE PROCEDURE MY_CLASS_CONFIG_DML (pBuCode VARCHAR2,
pMyPKId VARCHAR2,
pMyName VARCHAR2,
pMyId VARCHAR2,
pRemarks VARCHAR2,
pUserId VARCHAR2)
AS
v_table VARCHAR2 (50);
v_lastdate DATE;
--bindable var.
v_pkey VARCHAR2 (12) := pMyPKId;
v_myname VARCHAR2 (30) := pMyName;
v_bucode VARCHAR2 (4) := pBuCode;
v_myid VARCHAR2 (12) := pMyId;
v_remarks VARCHAR2 (50) := pRemarks;
v_lastid VARCHAR2 (8) := pUserId;
BEGIN
v_lastdate := SYSDATE;
v_table := v_bucode || '_WORKSHEET_CONFIG';
--Error happens on this part
EXECUTE IMMEDIATE
'insert into '
|| v_table
|| '(pk_id,my_name,my_id,remarks,last_user,last_date)
values(:pkey,:myname,:myid,:remarks,:user,:lastdate)'
USING v_pkey,
v_myname,
v_myid,
v_remarks,
v_lastid,
v_lastdate;
--end comment
COMMIT;
RETURN;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
END MY_CLASS_CONFIG_DML;
【问题讨论】:
您在绑定变量列表中传入v_lastdate
,但您尚未在声明部分声明 v_lastdate。这可能(将会!)是一个问题......
@Boneist,谢谢,已经添加了它,但是我仍然收到无效的主机/绑定错误。 Execute Immediate 语句有什么格式吗?
顺便说一句,异常隐藏器似乎没有帮助。如果insert
不起作用,有什么可以回滚的?如果它由于空间不足或损坏的索引块或其他原因而失败,您是否不想升级它,而不是默默地撤消自上次提交以来在会话中所做的所有事情?
@WilliamRobertson Robertson 感谢您提供的信息,我想我明白了。祝你有美好的一天!
在我用自己的演示表名称对其进行硬编码之后,该代码对我有用。重现该行为的简单演示会有所帮助(在创建它时,您甚至可能自己发现问题)。
【参考方案1】:
将:user
替换为另一个关键字::myuser
或:lastid
。冒号应该可以使用保留关键字“user”,但这是我看到的唯一问题。
【讨论】:
以上是关于Z-ORA-01745:无效的主机/绑定变量名 (PLSQL)的主要内容,如果未能解决你的问题,请参考以下文章
Cause: java.sql.SQLSyntaxErrorException: ORA-01745::无效的主机/绑定变量名
Oracle批量插入数据SQL语句太长出错:无效的主机/绑定变量名
SQL state [72000]; error code [1013]; ORA-03111: 通信通道收到中断; java.sql.SQLException: ORA-01745: 无效的主机/绑