CREATE OR REPLACE PROCEDURE STR_T (
v_no IN VARCHAR2,
v_res OUT REF CURSOR
AS
BEGIN
OPEN v_res FOR
SELECT i_no || '^' || rlse_no || '^' || TO_CHAR(n_txt) || ' ^' AS v_str
FROM iv
WHERE i_no = v_no;
END STR_T;
/
DECLARE
v_str1 VARCHAR2(20000);
v_str2 VARCHAR2(5000);
v_str3 VARCHAR2(30000);
BEGIN
SELECT TO_CHAR(SUBSTR(N_TEXT,1,4000))
INTO v_str1
FROM IV
WHERE inst_no = 'A110028863'
AND LENGTH(NOTE_TEXT) > 5000
AND ROWNUM < 2;
DBMS_OUTPUT.PUT_LINE('length : ' || LENGTH(v_str1));
v_str2 := SUBSTR(v_str1,1,2000);
v_str3 := v_str1 || '^' || v_str2;
END;
/
sql varchar2 fields can't be longer than 4000 characters.
You can use a clob to get larger strings, but you can't build it through concatenation like that.