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

Переводы статьи Переводы статьи
Код статьи: 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 AS
    Procedure 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 обратитесь на следующий веб-узел:
http://msdn2.Microsoft.com/en-US/Data/aa937695.aspx
Документация по программным Enterprise Edition

Свойства

Код статьи: 255043 - Последний отзыв: 5 июня 2011 г. - Revision: 4.0
Ключевые слова: 
kbhowto kboracle kbmt KB255043 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:255043
Заявление об отказе относительно содержимого статьи о продуктах, поддержка которых прекращена
Эта статья содержит сведения о продуктах, поддержка которых корпорацией Майкрософт прекращена. Поэтому она предлагается как есть и обновляться не будет.

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com