Oracle SQL Developer中使用自定义变量创建表无需弹窗输入的问题
问题原因
你现有代码的核心问题是混用了替代变量和绑定变量的语法:
DEFINE是SQL Developer/SQLPlus提供的替代变量*语法,定义时不需要指定数据类型,引用时用&而非:- 前缀为
:的是Oracle绑定变量,和DEFINE定义的变量不互通,所以运行时会触发绑定变量输入弹窗。
可行解决方案(两种任选,均不会弹出输入框)
方案1:用DEFINE替代变量实现
-- 关闭变量替换确认提示,无需二次确认 SET VERIFY OFF -- 定义替代变量,不需要指定数据类型,直接写表达式内容 DEFINE STARTDATE = "TO_DATE('2021-06-01','YYYY-MM-DD')" CREATE TABLE RESULTS AS SELECT * FROM TABLE_1 -- 用&引用替代变量,末尾的.用于明确变量边界避免歧义 WHERE DATA = ADD_MONTHS(&STARTDATE, 2);
替代变量本质是运行前的纯文本替换,相当于你手动把变量内容拼接到SQL语句里,适合一次性建表的场景。
方案2:用绑定变量实现
如果需要用绑定变量的特性(比如避免硬解析、多次复用),可以用如下写法:
-- 声明绑定变量,指定数据类型 VAR STARTDATE DATE -- 给绑定变量赋值 EXEC :STARTDATE := TO_DATE('2021-06-01','YYYY-MM-DD'); CREATE TABLE RESULTS AS SELECT * FROM TABLE_1 WHERE DATA = ADD_MONTHS(:STARTDATE, 2);
内容的提问来源于stack exchange,提问作者Piotr94
相关产品推荐
相关产品推荐

