В настоящее время вы работаете в автономном режиме; ожидается повторное подключение к Интернету

Получение набора записей ADO из Oracle через ASP с помощью КУРСОРОВ REF

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:255043
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.
Аннотация
В выпуске от Майкрософт данных Access Components (MDAC) 2.5 поставщик Microsoft OLE DB для Oracle теперь поддерживает возврат объектов данных ActiveX (ADO) наборах записей из процедуры Oracle через использование типа REF CURSOR. Эта функция поддерживается только в поставщик Microsoft OLE DB для Oracle. Microsoft ODBC для Oracle драйвер не поддерживает использование КУРСОРОВ REF.
Дополнительная информация
Эта новая функция имеет некоторые преимущества по сравнению с предыдущей поставщика:
  • В предыдущих версиях поставщика для объявления таблицы PL/SQL для каждого столбца, возвращенный набор записей был единственным способом получения набора записей ADO из процедуры Oracle. С помощью нового поставщика, необходимо объявить один REF CURSOR, которая затем обрабатывает возвращение всех столбцов.

    За дополнительной информацией по получению процедуры Oracle по таблицам PL/SQL щелкните следующий номер статьи базы знаний Майкрософт:
    229919 Извлечение записей из Oracle с помощью ADO на ASP
  • В предыдущей версии поставщика необходимо было задать максимальное число записей, которые возвращает набор записей. При открытии набора записей ADO, основанный на REF CURSOR данного шага нет необходимости. С помощью нового поставщика можно просто указать 0 для номера записи. Например:

    {call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}					
Использование примера в этой статье:
  • Вы должны быть хорошо знакомы с Microsoft Visual Basic Scripting Edition (VBScript), объекты данных ActiveX (ADO) и Active Server Pages (ASP).

  • Если будет создание пакетов Oracle, необходимо понимать язык запросов процедурный язык/структурного корпорации Oracle.

  • В Internet Information Server (IIS) должны быть правильно настроены для работы с базой данных Oracle.

    Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
    193225 Настройка служб IIS для подключения к базе данных Oracle из ADO и ASP

Пример кода

В следующем примере кода демонстрируется извлечение набора записей ADO из процедуры Oracle через REF CURSOR и данные отображаются на странице ASP. Необходимо изменить строку подключения OLEDB, используемые в коде ASP для подключения к базе данных Oracle.

  1. Создание следующего пакета Oracle на сервере Oracle, прежде чем запустить любой код ASP. Этот пакет использует некоторые таблицы, определенные в схеме Oracle Scott/Tiger. В схеме Oracle Scott/Tiger устанавливается вместе с Oracle установки по умолчанию. Если данная схема не существует, необходимо выполнить следующие сценарии таблицы и вставить некоторые данные в таблицах:

    Таблица сценариев
    CREATE TABLE DEPT(DEPTNO NUMBER(2,0) NOT NULL, DNAME VARCHAR2(14) NULL, LOC VARCHAR2(13) NULL,PRIMARY KEY (DEPTNO));CREATE TABLE EMP(EMPNO NUMBER(4,0) NOT NULL, ENAME VARCHAR2(10) NULL, JOB VARCHAR2(9) NULL, MGR NUMBER(4,0) NULL, HIREDATE DATE NULL, SAL NUMBER(7,2) NULL, COMM NUMBER(7,2) NULL, DEPTNO NUMBER(2,0) NULL,FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO),  PRIMARY KEY (EMPNO));						

    Сценарии пакета
    CREATE OR REPLACE PACKAGE curspkg_join AS 	TYPE t_cursor IS REF CURSOR ; 	Procedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor); END curspkg_join;/ CREATE OR REPLACE PACKAGE BODY curspkg_join ASProcedure open_join_cursor1 (n_EMPNO IN NUMBER, io_cursor IN OUT t_cursor) IS 	v_cursor t_cursor; BEGIN 	IF n_EMPNO <> 0 	THEN		OPEN v_cursor FOR 		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 			FROM EMP, DEPT 			WHERE EMP.DEPTNO = DEPT.DEPTNO 			AND EMP.EMPNO = n_EMPNO;	ELSE 		OPEN v_cursor FOR 		SELECT EMP.EMPNO, EMP.ENAME, DEPT.DEPTNO, DEPT.DNAME 			FROM EMP, DEPT 			WHERE EMP.DEPTNO = DEPT.DEPTNO;	END IF;	io_cursor := v_cursor; END open_join_cursor1; END curspkg_join;/ 						
  2. Ниже приведен сценарий ASP, который вызывает описанной выше процедуры.
    <%@ Language=VBScript %><HTML><HEAD><META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"></HEAD><BODY><P><%	Const CONNECT = "Provider=MSDAORA.1;Data Source=your_tns_alias_name;User ID=scott;Password=tiger"			Dim cn, rs, cmd, param	Dim SQL	set cn = Server.CreateObject( "ADODB.Connection" )	cn.Open CONNECT		SQL = "{call curspkg_join.open_join_cursor1(?, {resultset 0, io_cursor})}"	set cmd = server.CreateObject ("ADODB.Command")	with cmd		set .ActiveConnection	= cn	    .CommandText			= SQL	    .CommandType			= 1		'adCmdText	    'Pass in 0 to retrieve all of the records	    set param = .CreateParameter("id", 131 , 1 , , 0)  '<<131=adNumeric, 1=adParamInput	    .Parameters.Append param	end with						set rs = server.CreateObject ( "ADODB.Recordset" ) 	set rs = cmd.execute		    	%>	<TABLE WIDTH="80%" ALIGN=center BORDER=1 CELLSPACING=3 CELLPADDING=3>	<%	Response.Write ("<TR bgcolor=Gray>")	For i = 0 To rs.Fields.Count - 1		Response.Write ("<TD>" & rs.Fields(i).Name & "</TD>")	Next	Response.Write ("</TR>")	Do until rs.EOF		response.write ("<TR>")		for i = 0 to rs.Fields.Count - 1			If IsNull(rs(i).value) then 				Response.Write ("<TD> NULL </TD>")			else 				Response.Write ("<TD>" & rs(i).value & "</TD>")			end if 		next 		rs.MoveNext		response.write ("</TR>")	loop	%>	</TABLE>	<%	Set cmd = Nothing	Set param = Nothing	rs.close	Set rs = Nothing	cn.close	Set cn = Nothing%></P></BODY></HTML>						
Ссылки
Для получения дополнительных сведений о компонентах MDAC обратитесь на следующий веб-узел:Документация по программным Enterprise Edition
REF_CURSOR

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 255043 — последний просмотр: 06/05/2011 19:04:00 — редакция: 4.0

  • kbhowto kboracle kbmt KB255043 KbMtru
Отзывы и предложения