[20250418]绑定变量太多的限制.txt --//看看最多1条sql语句能有多少绑定变量。 1.环境: SCOTT@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.建立测试环境: create table t as select * from all_objects; create unique index i_t_object_id on t(object_id); --//分析略。 $ cat a.txt set pagesize 0 set head off set feedback off set verify off set timing off spool b1.txt select 'set termout off' from dual; select 'variable b'||to_char(level)||' number;' from dual connect by level<=&1; select 'begin' from dual; select ':b'||to_char(level)||' :='|| to_char(level)||';' from dual connect by level<=&1; select 'end;' from dual; select '/' from dual ; select 'set termout on' txt from dual; spool off spool b2.txt --select 'set timing on' txt from dual; select 'select count(data_object_id) from t where (1,object_id) in (' txt from dual ; select '(1,:b'||to_char(level)||'),' txt from dual connect by level<=&&1 -1 ; select '(1,:b'||to_char(&&1)||'));' txt from dual ; --select 'set timing off' txt from dual; spool off set pagesize 9999 set head on set feedback on 3.测试1,begin与end之间只能赋值32767个变量: SCOTT@book01p> @ a.txt 32768 --//输出略。 --//编辑b1.txt,删除开头的set termout off, set termout on。 SCOTT@book01p> @ b1.txt :b829 :=829; * ERROR at line 830: ORA-06550: line 32770, column 1: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PLS-00123: program too large (codegen operands) $ sed -n "32770p" b1.txt :b1 :=1; --//删除:b32768 :=32768;一行,再测试。 SCOTT@book01p> @ b1.txt PL/SQL procedure successfully completed. --//说明再begin..end之间可以定义32767个绑定变量。 4.测试2,一条sql语句能出现多少绑定变量: SCOTT@book01p> @ a.txt 65536 --//输出略。 --//编辑b1.txt,删除开头的set termout off, set termout on,并且适当编辑满足前面begin..end之间可以定义32767个绑定变量的 --//限制。 $ egrep -C 1 --no-group-separator "begin|end" b1.txt variable b65536 number; begin :b1 :=1; :b32767 :=32767; end; / begin :b32768 :=32768; :b65534 :=65534; end; / begin :b65535 :=65535; :b65536 :=65536; end; / SCOTT@book01p> @ b1.txt PL/SQL procedure successfully completed. PL/SQL procedure successfully completed. PL/SQL procedure successfully completed. SCOTT@book01p> @ b2.txt select count(data_object_id) from t where (1,object_id) in ( * ERROR at line 1: ORA-00920: invalid relational operator $ oerr ora 00920 00920, 00000, "invalid relational operator" // *Cause: // *Action: --//不知道是否超过集合的限制. --//编辑b2.txt 注解其中一行,看看情况的变化: $ head -2 b2.txt ;tail -3 b2.txt select count(data_object_id) from t where (1,object_id) in ( (1,:b1), (1,:b65534), --(1,:b65535), (1,:b65536)); SCOTT@book01p> @ b2.txt COUNT(DATA_OBJECT_ID) --------------------- 3970 --//可以发现sql语句里面存在65535个绑定变量,超过65536报错。 --//编辑b2.txt,再测试看看: $ head -2 b2.txt ;tail -5 b2.txt select count(data_object_id) from t where (1,object_id) in ( (1,:b1), (1,:b65534)) or (1,object_id) in ( (1,:b65535), (1,:b65536)); SCOTT@book01p> @ b2.txt select count(data_object_id) from t where (1,object_id) in ( * ERROR at line 1: ORA-00920: invalid relational operator --//说明不是超过集合的限制. --//可以看出一条sql语句里面存在65535个绑定变量。
[20250418]绑定变量太多的限制.txt
来源:这里教程网
时间:2026-03-03 21:52:23
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- [20250418]绑定变量太多的限制.txt
[20250418]绑定变量太多的限制.txt
26-03-03 - rac防火墙未禁用服务器重启导致二节点启动异常
rac防火墙未禁用服务器重启导致二节点启动异常
26-03-03 - 数据库管理-第317期 Oracle 12.2打补丁又出问题了(20250421)
- 大学生就业新方向:山姆代购,月入过万
大学生就业新方向:山姆代购,月入过万
26-03-03 - 业务高峰期ddl带崩数据库
业务高峰期ddl带崩数据库
26-03-03 - 利润暴跌30%,高管年薪狂涨84倍:谁在掏空贝壳找房?
利润暴跌30%,高管年薪狂涨84倍:谁在掏空贝壳找房?
26-03-03 - schedule job 新增删除操作简单研究
schedule job 新增删除操作简单研究
26-03-03 - Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
Oracle 11g RAC ASM磁盘组剔盘、加盘实施过程
26-03-03 - Oracle 11g RAC手动打补丁详细步骤
Oracle 11g RAC手动打补丁详细步骤
26-03-03 - adg查询数据与主库存在差异
adg查询数据与主库存在差异
26-03-03
