[20250419]str2varlist函数的一个小错误.txt

来源:这里教程网 时间:2026-03-03 21:52:22 作者:

[20250419]str2varlist函数的一个小错误.txt --//晚上想验证设置vartabletype类型TABLE OF VARCHAR2 (4000)可能不合理,因为这样每个绑定变量相当于占用4000字节,传入参数也 --//是占用4000字节,这样可能导致父游标堆0占用空间增加,其它情况自己也不是很清楚,想通过测试验证。 --//无意间发现原始代码的一个错误,我上网检索发现,其实许多人都是拷贝和粘贴,都是错误的。 CREATE OR REPLACE TYPE vartabletype AS TABLE OF VARCHAR2 (4000) / --//我发现许多连接定义类型VARCHAR2 (1000),我感觉定义32也许更加合理,或者写2个函数str2varlist1,str2varlist2,一个使用 --//VARCHAR2 (32),另外一个写入VARCHAR2 (128),很少分割后每个字符串长度大于128的情况。 --//测试感觉似乎没有什么影响。 CREATE OR REPLACE FUNCTION str2varlist (p_string IN VARCHAR2)    RETURN vartabletype AS    v_str    LONG            DEFAULT p_string || ',';    v_n      VARCHAR2 (2000);    ~~~~~~~~~~~~~~~~~~~~~~~~~~~    v_data   vartabletype    := vartabletype (); BEGIN    LOOP       v_n := INSTR (v_str, ',');       EXIT WHEN (NVL (v_n, 0) = 0);       v_data.EXTEND;       v_data (v_data.COUNT) := LTRIM (RTRIM (SUBSTR (v_str, 1, v_n - 1)));       v_str := SUBSTR (v_str, v_n + 1);    END LOOP;    RETURN v_data; END; / --//注意看下划线,这里明显写错,应该写成v_n PLS_INTEGER;,很明显许多人都是太相信别人的代码,一个抄一个都是错误的。 --//或者都是没人仔细阅读代码。接着先测试CREATE OR REPLACE TYPE vartabletype AS TABLE OF VARCHAR2 (4000)的情况。 CREATE OR REPLACE FUNCTION SCOTT.str2varlist (p_string IN VARCHAR2)    RETURN vartabletype AS    v_str    LONG DEFAULT p_string || ',';    v_n      PLS_INTEGER;    v_data   vartabletype := vartabletype (); BEGIN    LOOP       v_n := INSTR (v_str, ',');       EXIT WHEN (NVL (v_n, 0) = 0);       v_data.EXTEND;       v_data (v_data.COUNT) := LTRIM (RTRIM (SUBSTR (v_str, 1, v_n - 1)));       v_str := SUBSTR (v_str, v_n + 1);    END LOOP;    RETURN v_data; END; /

相关推荐