|
|
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Подскажите, пожалуйста, какой типа данных нужно дать переменной хранимой процедуры, чтобы получить после вызова этой процедуры массив записей, взятых из базы. Возможно ли вообще получить после выполнения процедуры что-то типа курсора в качестве переменной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 11:51 |
|
||
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
получить переменную типа ref cursor в клиентской проге вполне реально, в Визул Бэйсике не должно быть проблем, в Дэлфи в использованием АДОкомпонентов не получится, нужен ОДАК, а вот как это в Визуал С++ - не знаю, не делал.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 11:56 |
|
||
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
2 Виктория Можно ли узнать подробнее задачу, а то всегда интересовало для чего используют ref cursor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:02 |
|
||
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Nested Tables ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:42 |
|
||
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Sorry за такой пост, забыл откуда это :)) Using Ref Cursors To Return Recordsets Since Oracle 7.3 REF CURSORS have been available which allow recordsets to be returned from stored procedures, functions and packages. The example below uses a ref cursor to return a subset of the records in the EMP table. First, a package definition is needed to hold the ref cursor type: CREATE OR REPLACE PACKAGE Types AS TYPE cursor_type IS REF CURSOR; END Types; / Next a procedure is defined to use the ref cursor: CREATE OR REPLACE PROCEDURE GetEmpRS (p_deptno IN emp.deptno%TYPE, p_recordset OUT Types.cursor_type) AS BEGIN OPEN p_recordset FOR SELECT ename, empno, deptno FROM emp WHERE deptno = p_deptno ORDER BY ename; END GetEmpRS; / The resulting cursor can be referenced from PL/SQL as follows: SET SERVEROUTPUT ON 1000000 DECLARE v_cursor Types.cursor_type; v_ename emp.ename%TYPE; v_empno emp.empno%TYPE; v_deptno emp.deptno%TYPE; BEGIN GetEmpRS (p_deptno => 30, p_recordset => v_cursor); LOOP FETCH v_cursor INTO v_ename, v_empno, v_deptno; EXIT WHEN v_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE(v_ename || ' | ' || v_empno || ' | ' || v_deptno); END LOOP; CLOSE v_cursor; END; / In addition the cursor can be used as an ADO Recordset: Dim conn, cmd, rs Set conn = Server.CreateObject("adodb.connection") conn.Open "DSN=TSH1;UID=scott;PWD=tiger" Set cmd = Server.CreateObject ("ADODB.Command") Set cmd.ActiveConnection = conn cmd.CommandText = "GetEmpRS" cmd.CommandType = 4 'adCmdStoredProc Dim param1 Set param1 = cmd.CreateParameter ("deptno", adInteger, adParamInput) cmd.Parameters.Append param1 param1.Value = 30 Set rs = cmd.Execute Do Until rs.BOF Or rs.EOF -- Do something rs.MoveNext Loop rs.Close conn.Close Set rs = nothing Set param1 = nothing Set cmd = nothing Set conn = nothing The cursor can also be referenced as a Java ResultSet: import java.sql.*; import oracle.jdbc.*; public class TestResultSet { public TestResultSet() { try { DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@w2k1", "scott", "tiger"); CallableStatement stmt = conn.prepareCall("BEGIN GetEmpRS(?, ?); END;"); stmt.setInt(1, 30); // DEPTNO stmt.registerOutParameter(2, OracleTypes.CURSOR); //REF CURSOR stmt.execute(); ResultSet rs = ((OracleCallableStatement)stmt).getCursor(2); while (rs.next()) { System.out.println(rs.getString("ename") + ":" + rs.getString("empno") + ":" + rs.getString("deptno")); } rs.close(); rs = null; stmt.close(); stmt = null; conn.close(); conn = null; } catch (SQLException e) { System.out.println(e.getLocalizedMessage()); } } public static void main (String[] args) { new TestResultSet(); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:49 |
|
||
|
Тип данных параметра хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Всем большущее спасибо! 2 Oracle_Developer Требуется сформировать выпадающий список в клиентской программе. Для этого клиентская программа должна вызвать хранимую процедуру с указанием только имени (или псевдонима) требуемой таблицы. В ответ же клиент должен получить массив записей, содержащихся в этой таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 17:06 |
|
||
|
|

start [/forum/topic.php?fid=52&gotonew=1&tid=1990631]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
10ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 333ms |

| 0 / 0 |
