Oracle Java хранимые процедуры, возвращающие данные

Я пытаюсь написать хранимую процедуру Java, которая может вернуть результат. Я нашел этот документ на веб-сайте Oracle, но ни один из приведенных примеров не возвращает данные http://docs.oracle.com/cd/B19306_01/java.102/b14187/cheight.htm

Я создал пакет следующим образом:

CREATE OR REPLACE PACKAGE test_proc AS 
FUNCTION hello_world RETURN VARCHAR2;
PROCEDURE insert_test(CHAINE VARCHAR2, NOMBRE NUMBER);
END test_proc;

Тело пакета как следовать

CREATE OR REPLACE PACKAGE BODY test_proc AS
FUNCTION hello_world RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'TestProc.helloWorld() return java.lang.String';
PROCEDURE insert_test(CHAINE VARCHAR2, NOMBRE NUMBER) AS LANGUAGE JAVA
NAME 'TestProc.insertTEST(java.lang.String, int)';
END test_proc;

И код Java

public class TestProc {

public static void insertTEST(String chaine, int nombre) 
{
    System.out.println("Insert into test...");
    String sql = "INSERT INTO TEST VALUES(?,?)";
    try
    {
        Connection conn = DriverManager.getConnection("jdbc:default:connection:");
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, chaine);
        pstmt.setInt(2, nombre);
        pstmt.executeUpdate();
    }
    catch (SQLException e)
    {
        System.err.println(e.getMessage());     
    }
}

public static String helloWorld() 
{
    return "Hello world!!";
 }
}

Я использую SQLDeveloper для вызова своих процедур, используя следующие инструкции

CALL test_proc.insert_test('test',1); #work
CALL test_proc.hello_world(); #doesn't work

При выполнении второй инструкции у меня появляется следующая ошибка ORA-06576: недопустимое имя функции или процедуры

Ты знаешь как это решить? Или вы знаете, где найти рабочий пример хранимой процедуры Java, возвращающей данные в базу данных Oracle?

Наконец получил результат с помощью следующей команды:

select test_proc.hello_world() from dual;

Результат:

TEST_PROC.HELLO_WORLD()                                                              
-------------------------------------------------------------------------------------
Hello World!!
1 rows selected

Знаете ли вы, как вернуть сложный результат из базы данных, как несколько строк?

1 ответ

Для функции PL/SQL, которая возвращает что-то, вы не можете вызывать это в PL/SQL, как если бы это была процедура. Назовите это как функцию. Пытаться

var test VARCHAR2(30)
CALL test_proc.hello_world() INTO :test;
print test

TEST
------------------------------------------
Hello world!!
Другие вопросы по тегам