Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按给定参数插入表及其列的过程?_Sql_Oracle_Plsql_Blob - Fatal编程技术网

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:这有潜在的风险,更难调试,当然影响分析也变得更难。