ADF之在代码中调用PLSQL中的PKG

Posted 十木禾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ADF之在代码中调用PLSQL中的PKG相关的知识,希望对你有一定的参考价值。

如果想调用PLSQL中的PKG,则首先要在代码中连接到数据库中,以下提供两种连接方式:JDBCJNDI

关于这两种对数据库连接的区别,可见http://www.cnblogs.com/panjun-Donet/articles/1182204.html

JDBC连接数据库

    public Connection getJDBCConnection() 
        try 
            Connection conn = null;
            Class.forName("oracle.jdbc.driver.OracleDriver");
            conn = DriverManager.getConnection("URL", "UserName", "Password");
            return conn;
         catch (Exception e) 
            e.printStackTrace();
            return null;
        
    

JNDI连接数据库

    public Connection getJNDIConnection() 
        try 
            Connection conn = null;
            InitialContext ctx = new InitialContext();
            if (ctx != null) 
                Object o = ctx.lookup("DataSource Name");
                DataSource ds = (DataSource)o;
                conn = ds.getConnection();
            
            return conn;
         catch (Exception e) 
            e.printStackTrace();
        
        return null;
    

在得到数据库的连接之后,就可以很愉快的调用数据库里面的各种资源了

如下有一个PKG,命名为fnd_cux_pkg,其中有一个方法insert_lookup_type
代码如下

CREATE OR REPLACE PACKAGE fnd_cux_pkg IS

  -- Author  : 张俊强~
  -- Created : 2017/8/22 10:36:41
  -- Purpose : ADF调用pkg测试

  /*--======================--
  * 插入值列表中的Type
  *--======================--*/
  PROCEDURE insert_lookup_type(lookup_type_p VARCHAR2,
                               lookup_name_p VARCHAR2,
                               lookup_desc_p VARCHAR2,
                               module_code_p VARCHAR2); 

END fnd_cux_pkg;
CREATE OR REPLACE PACKAGE BODY fnd_cux_pkg IS

  PROCEDURE insert_lookup_type(lookup_type_p VARCHAR2,
                               lookup_name_p VARCHAR2,
                               lookup_desc_p VARCHAR2,
                               module_code_p VARCHAR2) IS
  BEGIN
    INSERT INTO FND_LOOKUP_TYPES
           (LOOKUP_ID,LOOKUP_TYPE,LOOKUP_NAME,LOOKUP_DESC,MODULE_CODE)
           VALUES
           (FND_LOOKUP_TYPES_S.Nextval,lookup_type_p,lookup_name_p,lookup_desc_p,module_code_p);
           COMMIT;
  END insert_lookup_type;
END fnd_cux_pkg;

现在要在代码中调用PKG啦

    /**
     * 调用pkg来插入一条数据到FND_LOOKUP_TYPE表中
     * */
    public void onInsertLookupTypeListener(ActionEvent actionEvent) 
        // 1: 获取与数据库的连接
        Connection conn =this.getJNDIConnection();//JDBC也可
        System.out.println(conn);
        try 
            PreparedStatement pStatement = 
                conn.prepareStatement("BEGIN fnd_cux_pkg.insert_lookup_type(?,?,?,?); END;");
                pStatement.setString(1, "HR_EMP_HEIGHT");
                pStatement.setString(2, "身高");
                pStatement.setString(3, "身高选择");
                pStatement.setString(4, "HR");
                pStatement.executeUpdate();
                conn.close();
         catch (SQLException e) 
            throw new RuntimeException("插入异常",e);
        
    

注:使用JDBC还是JNDI取决于AM中对于Connection Type的配置。

以上是关于ADF之在代码中调用PLSQL中的PKG的主要内容,如果未能解决你的问题,请参考以下文章

无法将查找活动输出映射到 ADF 中的复制活动映射

PL SQL 中的游标

错误:PL SQL 包中不存在表或视图

使用 Python 脚本的 ADF 管道中的 Azure 函数

使用 ADF 调用存储过程

Azure 数据工厂中的 Azure Synapse 存储过程:是同步调用吗?