【问题标题】:Oracle DB Java Stored Procedure: line starting with hash sign #Oracle DB Java 存储过程:以井号开头的行 #
【发布时间】:2022-07-14 01:32:22
【问题描述】:

我继承了一个旧的 Oracle 12c 数据库,该数据库在本地 Oracle 19c 服务器上运行。该数据库包含以下Java Stored Procedure

create or replace and compile java source named fill_share_content as
import java.io.*;
import java.sql.*;

public class Fill_Share_Content
{
  public static void execute(String directory) throws SQLException
  {
    File path = new File( directory );
    String[] list = path.list();
    String separator = path.separator;

    for(int i = 0; i < list.length; i++) 
    {
      String filename = list[i];
      File datei = new File( directory + separator + filename );
      if ( datei.isFile() )
      {
        Timestamp filedate = new Timestamp( datei.lastModified() );
        #sql { insert into Share_Content (filename, filedate) values (:filename, :filedate) };
      }
    }
  }
};
/

在尝试执行创建和编译 Java SP 的语句时出现问题:第 20 行

#sql { insert into Share_Content (filename, filedate) values (:filename, :filedate) };

抛出错误

错误:非法字符:'#'

通常我能够在数据库上创建、编译和执行 Java 存储过程。问题:

  1. 以井号开头的行是什么意思?我不熟悉 Java 中的这种结构,特定于 Oracle 中的 Java 存储过程?
  2. 如何才能创建和编译 Java 存储过程?据称该代码已经在另一个实例上运行,因此该代码应该可以工作。

【问题讨论】:

    标签: oracle java-stored-procedures


    【解决方案1】:

    代码是 SQLJ,记录在 here

    但是,从 Oracle 12.2 开始,Oracle does not support running SQLJ

    如果要在 Oracle 19 中运行,则需要将 SQLJ 代码转换为 JDBC。

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 2013-07-15
      • 1970-01-01
      • 2011-06-19
      • 2012-01-27
      • 1970-01-01
      相关资源
      最近更新 更多