2014-01-31 3 views
0

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

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

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!! 
+0

выходной вар VARCHAR2 (30) ВЫЗОВА test_proc.hello_world() в: выход; Выход для печати – Darwiin

+0

И получил следующую ошибку: ORA-01008: «не все переменные связаны» (Извините за форматирование, похоже, не работает в комментариях ...) – Darwiin

Смежные вопросы