标签: java-stored-procedures

Java存储过程与PL/SQL存储过程

在Oracle DBMS中,性能更好,从另一个pl/sql存储过程调用java存储过程或从另一个pl/sql存储过程调用pl/sql存储过程.

顺便说一下,我的pl/sql过程中有一个循环,它会多次调用java过程(即我的代码在PL/SQL和Java存储过程之间翻转),这样会降低性能吗?

oracle plsql java-stored-procedures

14
推荐指数
1
解决办法
5864
查看次数

如何从MySQL调用Java代码?

我在2008年发现了一篇文章,讨论如何从MySQL调用Java代码.有很多警告和免责声明,因为这个过程涉及使用MySQL的实验分支.

对于我想到的项目,能够访问MySQL中的Java库非常有用,类似于Oracle的Java存储过程.此功能现在是否作为MySQL的标准功能存在?如果没有,哪些开源RDBMS支持类似于Oracle的Java存储过程的东西?

java mysql java-stored-procedures

9
推荐指数
1
解决办法
7375
查看次数

StoredProcedureCall 1x Varchar输出1x光标输出

我的问题可能有点令人困惑.我有一个问题,我正在用StoredProcedureCallJava 调用一个过程,例如:

StoredProcedureCall call = new StoredProcedureCall();
    call.setProcedureName("test");
    call.addNamedArgument("p_year");
    call.addNamedArgument("p_rel");
    call.useNamedCursorOutputAsResultSet("p_resset");
Run Code Online (Sandbox Code Playgroud)

resset 是我的结果作为光标 - 正如你所看到的 - 当程序看起来像这样工作没有任何问题:

 create or replace PROCEDURE TEST (p_year IN NUMBER, 
                p_rel IN VARCHAR2,
                p_resset OUT SYS_REFCURSOR) AS
    BEGIN
       OPEN p_resset FOR
           SELECT NVL (s.KA, 'Summe') ka, 
                  COUNT (s.AZ) az
             FROM table1 s,
                  table2 w
            WHERE s.year= w.year
              AND w.relevant = p_rel 
              AND s.year = p_year
END;
Run Code Online (Sandbox Code Playgroud)

现在我添加了一个以"p_data"自己的select调用命名的输出参数

create or replace PROCEDURE TEST (p_year IN NUMBER, 
                p_rel IN VARCHAR2,
                p_data OUT VARCHAR2, …
Run Code Online (Sandbox Code Playgroud)

html java sql oracle java-stored-procedures

8
推荐指数
1
解决办法
344
查看次数

尝试在Oracle 11.2.0.2.0(64位)中获取连接时出现java.lang.ArithmeticException

我目前正在使用Oracle中的Java存储过程,并且在尝试在Java代码中获取连接时会看到一些奇怪的行为.

我的Java被打包成一个jar文件,然后使用loadjava命令行实用程序部署到Oracle中.package然后在数据库中创建A ,该数据库通过调用规范将指定Java类中的每个方法映射到PL/SQL函数.

我正在使用的一些专栏是CLOBs.在Java中,我尝试将其值CLOB(在调用规范中映射为oracle.sql.CLOB)提取到String:

private static String getStringFromCLOB(CLOB clob) throws SQLException {
    long length = clob.length();
    return clob.getSubString(1, (int) length);
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,我在SQL*Plus中显示以下堆栈跟踪:

java.lang.ArithmeticException: / by zero
    at oracle.jdbc.driver.T2SConnection.<init>(T2SConnection.java:107)
    at oracle.jdbc.driver.T2SDriverExtension.getConnection(T2SDriverExtension.java:31)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:481)
    at oracle.jdbc.driver.OracleDriver.defaultConnection(OracleDriver.java:505)
    at oracle.sql.DatumWithConnection.getPhysicalConnection(DatumWithConnection.java:53)
    at oracle.sql.DatumWithConnection.getInternalConnection(DatumWithConnection.java:177)
    at oracle.sql.CLOB.getDBAccess(CLOB.java:1383)
    at oracle.sql.CLOB.length(CLOB.java:197)
Run Code Online (Sandbox Code Playgroud)

在我刚刚看到这样的消息之前,我Exception用一个包装了违规方法的内容,try / catch所以我可以将完整的堆栈跟踪转储到System.out.

值得注意的是,我已经将其用于Oracle 11.2.0.1.0(32位),但它不适用于Oracle 11.2.0.2.0(64位).

我还有其他Java支持的PL/SQL function工作没有问题.只有尝试使连接失败的人才会这样做.

我已经看了一下<ORACLE_HOME>\jdbc\lib,虽然这两个发行版的名称相同,但这两个发行版似乎有所不同.目录中的jar(大小为11.2.0.1.0,显示大小为11.2.0.2.0):

  • ojdbc5.jar (1,950KB | 1,983KB)
  • ojdbc5_g.jar (3,010KB …

java oracle oracle11g java-stored-procedures

7
推荐指数
2
解决办法
2615
查看次数

如何将jar文件包含在Oracle中的Java存储过程中?

我正在实现一个存储过程,现在需要能够将jar文件包含到我的存储过程中,这些文件不属于JRE的标准部署.我怎样才能做到这一点?据我所知,Oracle 9不可能......

感谢帮助!

java oracle stored-procedures java-stored-procedures

6
推荐指数
1
解决办法
1万
查看次数

使用byte []在oracle中使用java用户定义的函数

鉴于Oracle中的这个表

create table test (bytes raw(100), chset varchar2(50))
insert into test (bytes, chset) values (hextoraw('454647'), 'iso-8859-1')
Run Code Online (Sandbox Code Playgroud)

或者在MSSQL中

create table test (bytes varbinary(100), chset nvarchar(50))
insert into test (bytes, chset) values (0x454647, 'iso-8859-1')
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个全面的例子,说明如何使用Java的文本编码支持在Java中创建Oracle的UDF.

在MSSQL中我会创建这个.Net程序集:

using System.Text;
using Microsoft.SqlServer.Server;

namespace Whatever
{
    public class Common
    {
        [SqlFunction]
        public static string Decode(byte[] Bytes, string EncodingName)
        {
            return Encoding.GetEncoding(EncodingName).GetString(Bytes);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用这些命令注册程序集并定义udf:

create assembly MyAssembly from '...\MyAssembly.dll'

create function decode(@bytes varbinary(max), @chset nvarchar(100))
returns nvarchar(max) as external name MyAssembly.[Whatever.Common].Decode
Run Code Online (Sandbox Code Playgroud)

并在这样的查询中使用它:

> select …
Run Code Online (Sandbox Code Playgroud)

java sql oracle user-defined-functions java-stored-procedures

5
推荐指数
1
解决办法
1338
查看次数

从具有复杂输入和输出类型的JDBC调用Oracle存储过程

我在解决这个问题上非常接近,但我显然错过了一些东西.我的要求是从JDBC调用Oracle中的存储过程.存储过程将1个用户定义的Oracle对象作为INput,将另一个用户定义的Oracle对象作为OUTput.INput和OUTput对象混合了原始Oracle数据类型和另一组用户定义对象的集合.只要我为INput和OUTput对象中的集合类型设置NULL,我就能成功调用存储过程并返回结果.如果我尝试为Oracle对象列表创建ArrayDescriptor以将其发送到存储过程,我会不断遇到障碍.所以我需要帮助弄清楚如何将Array设置为INput对象并将其设置为CallableStatement.请注意,我知道如何将原始类型和数组作为直接输入发送到存储过程.但我不想这样做,因为我们以后必须向程序发送10个额外的字段,我不想将它们添加到方法签名中.这是课程列表.此外,下面的代码没有编译错误.

在oracle中打包:

CREATE OR REPLACE PACKAGE testPkg AS 
PROCEDURE spGetTestData (
TESTDATA_IN              IN            TESTDATA_IN_OBJ,
TESTDATA_OUT     OUT             TESTDATA_OUT_OBJ
);
END;
Run Code Online (Sandbox Code Playgroud)

存储过程的输入对象:

CREATE OR REPLACE TYPE TESTDATA_IN_OBJ AS OBJECT(
testStr1            VARCHAR2(5),
arrObj1             ARR_OBJ_1_NT);
Run Code Online (Sandbox Code Playgroud)

Array对象作为INput对象的一部分:

create or replace TYPE      ARR_OBJ_1_NT AS TABLE OF ARR_OBJ_1_OBJ;
Run Code Online (Sandbox Code Playgroud)

INput对象的UserDefined对象部分:

CREATE OR REPLACE TYPE ARR_OBJ_1_OBJ AS OBJECT
(
teststr         VARCHAR2(14),
testNumber   NUMBER(4),
);
Run Code Online (Sandbox Code Playgroud)

TestDataINObj.java:

    import java.sql.Array;
    import java.sql.SQLData;
    import java.sql.SQLException;
    import java.sql.SQLInput;
    import java.sql.SQLOutput;

    public class TestDataINObj implements SQLData
    {
 private String sql_type = "TESTDATA_IN_OBJ"; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures jdbc java-stored-procedures

5
推荐指数
1
解决办法
4884
查看次数

在mysql过程中更新语句不起作用

这是我的程序代码.我试图通过在where子句中放置旧用户名来更新用户名.但它不起作用.

 DELIMITER $$

    DROP PROCEDURE IF EXISTS `databasename`.`UpdateUsername` $$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `UpdateUsername`
(IN  uname   VARCHAR(30),tid  VARCHAR(100),username VARCHAR(30)  )

BEGIN



UPDATE table_name SET Username=username WHERE Username=uname;

END $$ 
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题.

mysql stored-procedures java-stored-procedures

5
推荐指数
1
解决办法
3184
查看次数

如何使用 JPA 调用使用 MySQL 中的多个表的简单选择过程

我有一个从多个表返回结果的存储过程

CREATE DEFINER=`root`@`localhost` PROCEDURE `GetProjectAndClientOverview`()
BEGIN
  SELECT ( SELECT count(*)  FROM projects_info) as "projects_done",
    (SELECT COUNT(*) FROM client_info) as "happy_clients",
    (SELECT count(*) FROM projects_info where category_id in(
select id from pme.projects_category
where category_name in 
("Commercial","Corporate","Hospitality")
))  as "real_professionals" ,
    (SELECT COUNT(*) FROM client_info) as "cups_of_coffee";
END
Run Code Online (Sandbox Code Playgroud)

我必须使用 JPA 在 SpringBoot 中调用此过程,请指导如何为此存储过程创建实体类、存储库、服务。

我尝试创建实体类但不确定它是否正确

 package com.panchmeru_studio.entities;
    
    import lombok.Data;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.NamedStoredProcedureQueries;
    import javax.persistence.NamedStoredProcedureQuery;
    
    @Data
    @Entity
   @NamedStoredProcedureQueries({
    @NamedStoredProcedureQuery(name = "getProjectAndClientOverview",
                                procedureName = "GetProjectAndClientOverview",
    resultClasses ={ ProjectsInfo.class ,ClientInfo.class})
})
    public class …
Run Code Online (Sandbox Code Playgroud)

jpa hibernate-mapping java-stored-procedures spring-boot-jpa

5
推荐指数
0
解决办法
542
查看次数

任何人都可以说存储过程的利弊和Java存储过程的优点和缺点?

任何人都可以说存储过程的利弊和Java存储过程的优点和缺点?以及如何测试它.

最好的祝福!

database stored-procedures java-stored-procedures

3
推荐指数
1
解决办法
3874
查看次数