【问题标题】:Oracle SQL. CREATE DIRECTORY pass path as a paramiter of Java stored procedure甲骨文 SQL。 CREATE DIRECTORY 传递路径作为 Java 存储过程的参数
【发布时间】:2014-04-07 12:10:45
【问题描述】:

我是 Oracle 的新手,我想在我的 Java 存储过程中创建 DIRECTORY 对象,我将此目录的路径传递给该对象。所以我选择:

CREATE OR REPLACE
 AND compile JAVA source named "Test0"
 AS
  import java.io.*;
   import java.sql.*;
 class Test0 {
     public static void Load(String dctry) throws SQLException {
     System.out.println(dctry);
     #sql { CREATE DIRECTORY IMG_DIR_TMP AS :dctry};
    }
  }
/ 

CREATE OR REPLACE PROCEDURE test_0_sp(dctry IN VARCHAR2)
AS LANGUAGE JAVA
name 'Test0.Load(java.lang.String)';
/

begin
test_0_sp('/home/oracle/Desktop/sql/images');
end;

我得到:

oracle.jdbc.driver.OracleSQLException: ORA-01780: string literal required

我也尝试过,即使是普通的 PL/SQL 块,但我失败了:

declare
direct varchar2(50);
begin
direct := '/home/oracle/Desktop/sql/images';
DBMS_OUTPUT.PUT_LINE(direct);
CREATE DIRECTORY IMG_DIR_TMP AS :direct;
end;

Bind Variable "direct" is NOT DECLARED

非常感谢您的帮助,尤其是在第一个 Java 存储过程方面。 祝福你

【问题讨论】:

    标签: java sql oracle stored-procedures


    【解决方案1】:

    我找到了解决方案,也许有一天它会对某人有用。

    Java SP

    CREATE OR REPLACE
     AND compile JAVA source named "Test0"
     AS
      import java.io.*;
       import java.sql.*;
     class Test0 {
         public static void Load(String dctry) throws SQLException {
         System.out.println(dctry);
         String qry = "CREATE OR REPLACE DIRECTORY IMG_DIR_TMP AS '" + dctry + "'";
          System.out.println(qry);
          #sql { 
                begin
                  execute immediate :qry;
                end;
          };
        }
      }
    / 
    
    CREATE OR REPLACE PROCEDURE test_0_sp(dctry IN VARCHAR2)
    AS LANGUAGE JAVA
    name 'Test0.Load(java.lang.String)';
    /
    
    begin
    test_0_sp('/home/oracle/Desktop/sql/images');
    end;
    

    PL/SQL 块

    declare
    direct varchar2(100);
    qry varchar2(200);
    begin
    direct := '/home/oracle/Desktop/sql/images';
    qry := q'[CREATE OR REPLACE DIRECTORY IMG_DIR_TMP AS ']'||direct||q'[;']';
    DBMS_OUTPUT.PUT_LINE(qry);
    execute immediate qry;
    end;
    

    您好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 2010-09-11
      • 2013-07-28
      • 2017-03-18
      • 1970-01-01
      • 2014-05-15
      相关资源
      最近更新 更多