Plsql Oracle-在CLOB中存储大字符串
我需要使用变量将过程主体保存到Clob列中。字符串长度超过4000个字符,因此我不能使用VarChar2,但使用CLOB变量时,我收到错误“ORA-01422:exact fetch返回的行数超过请求的行数”。Varchar2也会出现同样的错误。我的PL/SQL块:Plsql Oracle-在CLOB中存储大字符串,plsql,oracle11g,Plsql,Oracle11g,我需要使用变量将过程主体保存到Clob列中。字符串长度超过4000个字符,因此我不能使用VarChar2,但使用CLOB变量时,我收到错误“ORA-01422:exact fetch返回的行数超过请求的行数”。Varchar2也会出现同样的错误。我的PL/SQL块: DECLARE txt_procedure CLOB; BEGIN SELECT text INTO txt_procedure FROM all_source WHERE name = 'My_procedure' ORDER
DECLARE
txt_procedure CLOB;
BEGIN
SELECT text INTO txt_procedure
FROM all_source
WHERE name = 'My_procedure'
ORDER BY line;
INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/
如何将过程主体插入clob列?由于您将从查询中获得源代码每一行的多行,以下内容可能会有所帮助:
DECLARE
txt_procedure CLOB;
BEGIN
FOR source_r IN ( SELECT text
FROM all_source
WHERE name = 'My_procedure'
ORDER BY line
)
LOOP
txt_procedure := txt_procedure || chr(10) || source_r.text;
END LOOP;
INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/
更新
另一种方法是,您也可以使用DBMS_元数据包:
DECLARE
txt_procedure CLOB;
BEGIN
txt_procedure := DBMS_METADATA.get_ddl(
object_type => 'PROCEDURE',
name => 'My_procedure',
owner => 'YOUR_SCHEMA'
);
INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/
对于源代码的每一行,您将从查询中获得多个行,以下内容可能会有所帮助:
DECLARE
txt_procedure CLOB;
BEGIN
FOR source_r IN ( SELECT text
FROM all_source
WHERE name = 'My_procedure'
ORDER BY line
)
LOOP
txt_procedure := txt_procedure || chr(10) || source_r.text;
END LOOP;
INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/
更新
另一种方法是,您也可以使用DBMS_元数据包:
DECLARE
txt_procedure CLOB;
BEGIN
txt_procedure := DBMS_METADATA.get_ddl(
object_type => 'PROCEDURE',
name => 'My_procedure',
owner => 'YOUR_SCHEMA'
);
INSERT INTO TABLE1(ID,DATE,CLOB_COLUMN)
VALUES (my_seq.NEXTVAL,'11.10.2018',txt_procedure);
END;
/
您确定对源“My_过程”的查询只返回一行吗?@DanielFrech,不,我没有返回一行,这是真的。但我需要所有的程序文本并将其插入clob,这就是重点。我没有找到其他东西,然后从所有来源中选择。好的,我添加了一个答案。希望有帮助。您确定对源代码“My_过程”的查询只返回一行吗?@DanielFrech,不,我没有返回一行,这是真的。但我需要所有的程序文本并将其插入clob,这就是重点。我没有找到其他东西,然后从所有来源中选择。好的,我添加了一个答案。希望有帮助。就这样,非常感谢!我一直在尝试各种东西,但没有想到一个循环。好的,丹尼尔,回答得很好。成功了,非常感谢!我一直在尝试各种各样的东西,但没有想到一个循环。很好,丹尼尔,回答得很好。