Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тип данных параметра хранимой процедуры / 6 сообщений из 6, страница 1 из 1
12.05.2003, 11:51
    #32157293
Виктория
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
Подскажите, пожалуйста, какой типа данных нужно дать переменной хранимой процедуры, чтобы получить после вызова этой процедуры массив записей, взятых из базы.
Возможно ли вообще получить после выполнения процедуры что-то типа курсора в качестве переменной?
...
Рейтинг: 0 / 0
12.05.2003, 11:56
    #32157297
Guilty
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
получить переменную типа ref cursor в клиентской проге вполне реально, в Визул Бэйсике не должно быть проблем, в Дэлфи в использованием АДОкомпонентов не получится, нужен ОДАК, а вот как это в Визуал С++ - не знаю, не делал..
...
Рейтинг: 0 / 0
12.05.2003, 12:02
    #32157304
Oracle_Developer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
2 Виктория

Можно ли узнать подробнее задачу, а то всегда интересовало для чего используют ref cursor
...
Рейтинг: 0 / 0
12.05.2003, 12:42
    #32157363
Hardex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
Nested Tables
...
Рейтинг: 0 / 0
12.05.2003, 12:49
    #32157378
Mergen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
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();
}
}
...
Рейтинг: 0 / 0
12.05.2003, 17:06
    #32157841
Виктория
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тип данных параметра хранимой процедуры
Всем большущее спасибо!

2 Oracle_Developer
Требуется сформировать выпадающий список в клиентской программе.
Для этого клиентская программа должна вызвать хранимую процедуру с указанием только имени (или псевдонима) требуемой таблицы.
В ответ же клиент должен получить массив записей, содержащихся в этой таблице.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Тип данных параметра хранимой процедуры / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]