Как в ColdFusion с переменными получить хранимую процедуру Oracle для возврата значений? - PullRequest
0 голосов
/ 26 июля 2011

ORACLE 11g - COLDFUSION 9 - REF CURSOR - С хотя бы одной переменной.

Как в ColdFusion с переменными получить хранимую процедуру Oracle для возврата значений?

Мы пробовали нескольковещи, мы можем получить хранимую процедуру для возврата набора результатов, если мы не передаем переменные, но мы не можем получить их, когда передаем переменные.

Мы знаем, как это сделать, вызывая MS SQL.

Спасибо за любую помощь

PS Мы слышали, что это невозможно с текущим драйвером Oracle. Есть ли другой драйвер Oracle?

Из того, что я читал в Интернете, я нахожусьдумая, что это не просто проблема кодирования.Надеюсь, я ошибаюсь по этому поводу.Это всего лишь пример, над которым я работал в качестве доказательства концепции, чтобы я мог начать создавать их все.Я могу заставить его работать, если я не использую ref cusor.

Ошибка выполнения запроса к базе данных.
[Macromedia] [Oracle JDBC Driver] Указанный тип SQL не поддерживается этим драйвером.

Ошибка произошла в D: \ apache \ htdocs \ test \ index.cfm: строка 86

84: 85: 86: 87: 88:

CF Вызов процедуры

<cfstoredproc procedure="BWNGDBADEV.PACK_REFCURSOR.GETALL" datasource="mydatasourcename" returncode="no">
    <cfprocparam type="InOut" cfsqltype="CF_SQL_INTEGER" variable="pPERSONNELID" value="4" null="No">
    <cfprocparam type="Out" cfsqltype="CF_SQL_REFCURSOR" variable="AnyVarName">
    <!--- *** This name ties StoredProc results to the query below *** --->
    <cfprocresult name="myvar">
</cfstoredproc>

Пакет Oracle

CREATE OR REPLACE
PACKAGE PACK_REFCURSOR
AS
TYPE EMP_TableRows
IS
  REF
  CURSOR
    RETURN BWNGDBADEV.PER_PERSONNEL%ROWTYPE;
PROCEDURE GETALL(
      pPERSONNELID IN OUT BWNGDBADEV.PER_PERSONNEL.PERSONNELID%type,
      OUTTABLE OUT EMP_TableRows);
END PACK_REFCURSOR ;
  /


CREATE OR REPLACE
PACKAGE BODY PACK_REFCURSOR
AS
PROCEDURE GETALL(
      pPERSONNELID IN OUT BWNGDBADEV.PER_PERSONNEL.PERSONNELID%type,
      OUTTABLE OUT EMP_TableRows)
IS
BEGIN 
-- implicit cursor is opened - no close needed ***    
OPEN OUTTABLE FOR 
SELECT * 
FROM BWNGDBADEV.PER_PERSONNEL 
WHERE PERSONNELID = pPERSONNELID;

END GETALL ;

END PACK_REFCURSOR ;
/

Ответы [ 2 ]

0 голосов
/ 29 июля 2011

у вас есть последние версии драйверов DataDirect JDBC?

v 3.5 драйверы и примечания к выпуску здесь: http://kb2.adobe.com/cps/000/42dcb10a.html

примечания к выпуску предполагают, что это решит вашу точную проблему

0 голосов
/ 26 июля 2011

В документации есть небольшая заметка: «Вы не можете использовать тег cfprocparam для справочных курсоров Oracle 8 и 9. Вместо этого используйте тег cfprocresult».

http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d52.html

Попробуйте что-нибудь в этом духе:

<cfstoredproc 
    procedure = "BWNGDBADEV.PACK_REFCURSOR.GETALL" 
    dataSource = "mydatasourcename" 
    returnCode = "Yes"> 

    <!--- cfprocparam tags ---> 
    <cfprocparam type="InOut" cfsqltype="CF_SQL_INTEGER" variable="pPERSONNELID" value="4" null="No">
    <cfprocparam type="Out" cfsqltype="CF_SQL_REFCURSOR" variable="AnyVarName">

    <!--- cfprocresult tags ---> 
    <cfprocresult name="RS1" resultSet="1"> 
    <cfprocresult name="RS2" resultSet="2"> 

</cfstoredproc> 
...