Sql 按给定参数插入表及其列的过程?
我将从一些代码开始Sql 按给定参数插入表及其列的过程?,sql,oracle,plsql,blob,Sql,Oracle,Plsql,Blob,我将从一些代码开始 CREATE OR REPLACE PROCEDURE LOAD_IMAGE_INTO_TABLE ( imgDir varchar2 , imgName varchar2 , destTable varchar2 , destIndex varchar2 , destBlob varchar2) AS fHnd bfile; b blob;
CREATE OR REPLACE PROCEDURE LOAD_IMAGE_INTO_TABLE (
imgDir varchar2
, imgName varchar2
, destTable varchar2
, destIndex varchar2
, destBlob varchar2)
AS
fHnd bfile;
b blob;
srcOffset integer := 1;
dstOffset integer := 1;
BEGIN
dbms_lob.CreateTemporary( b, true );
fHnd := BFilename( imgDir, imgName );
dbms_lob.FileOpen( fHnd, DBMS_LOB.FILE_READONLY );
dbms_lob.LoadFromFile( b, fHnd, DBMS_LOB.LOBMAXSIZE, dstOffset, srcOffset );
--insert into (Select * From user_tables Where table_name = destTable) values(imgName,b);
--insert into destTable (destIndex, destBlob) values( imgName, b );
commit;
dbms_lob.FileClose( fHnd );
END LOAD_IMAGE_INTO_TABLE;
正如您可能看到的,我正在尝试创建一个将图像放入表中的过程。目标表名和列名(imgname和blobfile)将作为参数提供
我试过的两种方法都不管用。(请参见--在代码中插入(…)
也许你知道怎么解决这个问题吗
提前感谢。在dml子句中不能将表名作为参数传递。查看
EXECUTE IMMEDIATE
以获得所需内容。您真的有这么多用于存储图像的表,需要参数化表名和列名吗?@KoenLostrie好的,谢谢,我要试试that@APC其实不是,,但我认为这比让多个过程做同一件事要好。插入不同的表不是“让多个过程做同一件事”。它有多个程序来做类似的事情。减少重复的一个选择是有一个包。编写一个标准过程将文件加载到PL/SQL变量中,然后编写过程加载调用该过程的命名表。使用动态SQL是另一种解决方案。一般来说,我不喜欢在应用程序代码中使用动态SQL:这有潜在的风险,更难调试,当然影响分析也变得更难。不能在dml子句中将表名作为参数传递。查看EXECUTE IMMEDIATE
以获得所需内容。您真的有这么多用于存储图像的表,需要参数化表名和列名吗?@KoenLostrie好的,谢谢,我要试试that@APC其实不是,,但我认为这比让多个过程做同一件事要好。插入不同的表不是“让多个过程做同一件事”。它有多个程序来做类似的事情。减少重复的一个选择是有一个包。编写一个标准过程将文件加载到PL/SQL变量中,然后编写过程加载调用该过程的命名表。使用动态SQL是另一种解决方案。一般来说,我不喜欢在应用程序代码中使用动态SQL:这有潜在的风险,更难调试,当然影响分析也变得更难。