oracle字段大段字符串,ORACLE存储过程,参数目字符串太长

ORACLE存储过程,参数字符串太长

在做存储过程开发的时候,需要拼SQL语句,比如

DECLARE

V_SQL VARCHAR2(32000);

BEGIN

V_SQL := 'INSERT INTO TB_TA(COUNTER0001,COUNTER0002.......COUNTER1000)

SELECT

公式1,

公式2,

......

公式10000

from

TB_BASE BASE

LEFT JOIN TB_COUNTER0001 T0001 ON T0001.A = BASE.A

LEFT JOIN TB_COUNTER0002 T0002 ON T0002.A = BASE.A

......

LEFT JOIN TB_COUNTER1000 T1000 ON T1000.A = BASE.A';

EXECUTE IMMEDIATE V_SQL;

COMMIT;

END;

但是这个SQL语句很大很大,绝对的超过了32767限制,而且就算拆成小段也会超过,比如这么拆:

DECLARE

V_INSERT VARCHAR2(32000);

V_FORMATE VARCHAR2(32000);

V_TABLE VARCHAR2(32000);

BEGIN

V_INSERT := '(COUNTER0001,COUNTER0002.......COUNTER1000)';

V_FORMATE := '公式1,公式2,......公式10000';

V_TABLE := '

LEFT JOIN TB_COUNTER0001 T0001 ON T0001.A = BASE.A

LEFT JOIN TB_COUNTER0002 T0002 ON T0002.A = BASE.A

......

LEFT JOIN TB_COUNTER1000 T1000 ON T1000.A = BASE.A';

EXECUTE IMMEDIATE 'INSERT INTO TB_TA' || V_INSERT ||

'SELECT'||

V_FORMATE ||

'from

TB_BASE BASE' || V_TABLE;

EXECUTE IMMEDIATE V_SQL;

COMMIT;

END;

V_FORMATE就已经超过了,现在已经不知所措,问问大侠有没有方法可以解决。

我自己有个设想,就是把这些丢到BOLB里面去,

然后写一个函数FUN_BOOLTOVARCHAR2,

然后执行

EXECUTE IMMEDIATE FUN_BOOLTOVARCHAR2(BOLB_SQL);

COMMIT;

但是不知道可行性怎么样?

请各位大侠看看!

拜谢!!

------最佳解决方案--------------------

1 CLOB就可以了

2 长SQL面临解析的问题,不是存个字符串就能搞定的。

------其他解决方案--------------------

引用:1 CLOB就可以了

2 长SQL面临解析的问题,不是存个字符串就能搞定的。

大侠

可以直接

DECLARE

CLOB_SQL CLOB;

BEGIN

EXECUTE IMMEDIATE CLOB_SQL;

END;

这样么?

没有用过CLOB。。。

------其他解决方案--------------------

好吧 问题已经解决了 谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值