REF CURSOR? FUNCTION RETURN VALUE BASED ON DYN QUERY
Hi to all,
i need to write a function that do the following (but have to work...):
Note: what i really don't remember is how can i have a valid cursor based using
a dynamic field taken from the input value PAR_NAME.
Hope that my problem is clear reading the NOT WORKING CODE below.
thanx a lot
CREATE OR REPLACE
FUNCTION FNC_RET_FLD_VAL(ID_CNT NUMBER, PAR_NAME VARCHAR2) RETURN VARCHAR2 AS
RETVAL VARCHAR2(300);
CURSOR FVAL IS
SELECT PAR_NAME FROM TBCONTATTI WHERE NORECORD=ID_CNT;
BEGIN
FOR REC IN FVAL LOOP
RETVAL:=REC.PAR_NAME;
END LOOP;
RETURN RETVAL;
END FNC_RET_FLD_VAL;
Like this ?
SQL> create function get_data(colname varchar2, empno number)
2 return varchar2
3 is
4 ret varchar2(4000);
5 begin
6 begin
7 execute immediate 'select ' || colname || ' from emp where empno = :1' into ret using empno;
8 exception
9 when no_data_found then
10 ret := null;
11 end;
12 return ret;
13 end;
14 /
Function created.
SQL> select get_data('ename',7369) from dual;
GET_DATA('ENAME',7369)
SMITH
SQL> select get_data('job',7369) from dual;
GET_DATA('JOB',7369)
CLERK
SQL> select get_data('job',-1) from dual;
GET_DATA('JOB',-1)
Rgds.
Similar Messages
-
Ref cursor stopped returning values for the output.
Hi Everyone,
My DB version is
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bi
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
Please do have a look at the code, and let me know where I've gone wrong, because select query is fetching data. Previously procedure was returning values too through ref cursor. Please correct me where I've gone wrong.
create or replace
PROCEDURE
SPL_SPN_MISSING_EMR_AOE_DTL (IN_PATIENT_ID NUMBER,
IN_FACILITY_ID NUMBER,
IN_DRAW_DT DATE,
IN_REQUISITION_NUMBER ORDER_REQUISITION_HEADER.REQUISITION_NUMBER%TYPE,
IN_CORP_ACRONYM CORPORATION.CORPORATION_ACRONYM%TYPE,
IN_ABCDEF_MRN PATIENT.ABCDEF_MRN%TYPE,
IN_ACCOUNT_NUMBER FACILITY_ACCOUNT_DETAIL.ACCOUNT_NUMBER%TYPE,
IN_HLAB_NUM FACILITY_ACCOUNT_DETAIL.HLAB_NUM%TYPE,
OV_COMMENTS OUT VARCHAR2,
OR_QUES_AND_ANS OUT SYS_REFCURSOR) AS
* Copyright (C) 2013 ABCDEF Laboratories
* All Rights Reserved
* This Work Contains Trade Secrets And Confidential Material Of
* ABCDEF Laboratories., And Its Use Of Disclosure In Whole Or In Part
* Without Express Written Permission Of ABCDEF Laboratories Is Prohibited.
* Company : ABCDEF Laboratories
* Project : ABCDEF Scorpion
* Name : SPL_SPN_MISSING_EMR_AOE_DTL
* In Parameters : In_Patient_Id Number
* In_Facility_Id Number
* In_Draw_Dt Date
* In_Requisition_Number Order_Requisition_Header.Requisition_Number%Type,
* In_Corp_Acronym Corporation.Corporation_Acronym%Type
* In_ABCDEF_Mrn Patient.ABCDEF_Mrn%Type
* In_Account_Number Facility_Account_Detail.Account_Number%Type
* In_Hlab_Num Facility_Account_Detail.Hlab_Num%Type
* Out Parameters : OV_COMMENTS Out Varchar2
* OR_QUES_AND_ANS Out Sys_Refcursor
* Description : This Procedure Will Fetch The Mising Emr Aoe Detail And Provide
* Necessary Comments As Well.
* Modification History :
* Date Version No. Author Description
* 21/01/2014 1.0 ABCDEF Initial Version
* 27/01/2014 1.1 ABCDEF Restricted the output for duplicate questions
* and answers, partially answered AOE. Also renamed
* the output variable names.
CC_PACKAGE_NAME CONSTANT VARCHAR2(50) := 'SPL_SPN_MISSING_EMR_AOE_DTL';
CC_PROCEDURE_NAME CONSTANT VARCHAR2(50) := 'SPL_SPN_MISSING_EMR_AOE_DTL';
VC_AVL_PAT_QUES VARCHAR2(1000);
VC_DUP_PAT_QUES VARCHAR2(1000);
VC_ACTUAL_QUES VARCHAR2(1000);
VC_ACTUAL_QUES_CNT NUMBER:= 0;
VR_QUES_AND_ANS SYS_REFCURSOR;
VN_AVL_PAT_QUES_CNT NUMBER := 0;
VN_DUP_PAT_QUES_CNT NUMBER := 0;
VN_EXACT_PAT_ID_CNT NUMBER := 0;
VN_DUPL_PAT_ID NUMBER := 0;
VN_EXTERNAL_ID PATIENT.EXTERNAL_ID%TYPE;
VC_OBX_QUES VARCHAR2(1000);
VC_OBX_QUES_CNT NUMBER := 0;
VN_OBX_QUES_CNT NUMBER := 0;
PAT_EXTERNAL_ID PATIENT.EXTERNAL_ID%TYPE;
VC_EXACT_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_EXACT_PAR_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_DUPL_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_DUPL_PAR_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_REJECTED_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_REJECTED_PAR_BOOLEAN_VAL VARCHAR2(10) := 'FALSE';
VC_COMMENTS VARCHAR2(100);
VC_PAR_COMMENTS VARCHAR2(100);
VC_RETURN_EXACT_PAT CHAR(1) := 'N';
VC_RETURN_DUPL_PAT CHAR(1) := 'N';
VC_RETURN_REJECT_PAT CHAR(1) := 'N';
VC_CHK_FOR_EXT_ID CHAR(1) := 'N';
VN_MAX_MSG_ID INTERFACE_A04_OBX_SEGMENT.MSG_ID%TYPE;
VN_MAX_COUNT NUMBER := 0;
VN_ITERATION_RUN NUMBER := 0;
BEGIN
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'Start of the procedure with Patient_Id:'||IN_PATIENT_ID||' Facility_Id:'||IN_FACILITY_ID||
' Draw_Dt:'||IN_DRAW_DT||' Requisition_Number:'||IN_REQUISITION_NUMBER||' Corp_Acronym:'||IN_CORP_ACRONYM||
' ABCDEF_Mrn:'||IN_ABCDEF_MRN||' Account_Number:'||IN_ACCOUNT_NUMBER||' Hlab_Num:'||IN_HLAB_NUM);
<<AOE_TEST_LOOP>>
FOR AOE_REC IN (SELECT ORD.TEST_ID
FROM ORDER_REQUISITION_DETAIL ORD
WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
FROM ORDER_REQUISITION_HEADER ORH
WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)
AND ORD.TEST_CODE IN (SELECT TEST_CODE FROM INTERFACE_ADT_AOE_MASTER WHERE SOURCE_SYSTEM = IN_CORP_ACRONYM))
LOOP
VN_ITERATION_RUN := VN_ITERATION_RUN + 1;
SELECT COUNT(DISTINCT PATIENT_ID)
INTO VN_EXACT_PAT_ID_CNT
FROM EMR_ADTAOE_DTL
WHERE PATIENT_ID = IN_PATIENT_ID
AND TEST_ID = AOE_REC.TEST_ID
AND FACILITY_ID = IN_FACILITY_ID
AND (DRAW_DATE = IN_DRAW_DT
OR DRAW_DATE = TO_DATE('2999/12/31','YYYY/MM/DD'))
AND SOURCE_SYSTEM = IN_CORP_ACRONYM ;
--Collecting all questions in interface_adt_aoe_master
SELECT STRAGG(SUB1.QUESTION_CODE), COUNT(SUB1.QUESTION_CODE)
INTO VC_ACTUAL_QUES, VC_ACTUAL_QUES_CNT
FROM (SELECT DISTINCT QUESTION_CODE FROM INTERFACE_ADT_AOE_MASTER
WHERE TEST_CODE = (SELECT TEST_CODE FROM TEST WHERE TEST_ID = AOE_REC.TEST_ID)
AND SOURCE_SYSTEM = IN_CORP_ACRONYM
ORDER BY QUESTION_CODE) SUB1;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_actual_ques:'||VC_ACTUAL_QUES ||
' vn_exact_pat_id_cnt:'||VN_EXACT_PAT_ID_CNT||
' aoe_rec.test_id:'||AOE_REC.TEST_ID||
' VN_ITERATION_RUN:'||VN_ITERATION_RUN);
<<MAIN_IF_BLOCK>>
IF
VN_EXACT_PAT_ID_CNT = 1 AND
VN_ITERATION_RUN >= 1 THEN
--Collecting avaliable questions in emr_adtaoe_dtl
SELECT STRAGG(SUB.QUESTION_CODE), COUNT(DISTINCT SUB.QUESTION_CODE)
INTO VC_AVL_PAT_QUES, VN_AVL_PAT_QUES_CNT
FROM (SELECT DISTINCT QUESTION_CODE FROM EMR_ADTAOE_DTL
WHERE TEST_ID = AOE_REC.TEST_ID
AND PATIENT_ID = IN_PATIENT_ID
AND FACILITY_ID = IN_FACILITY_ID
AND (DRAW_DATE = IN_DRAW_DT
OR DRAW_DATE = TO_DATE('2999/12/31','YYYY/MM/DD'))
AND SOURCE_SYSTEM = IN_CORP_ACRONYM
AND ANSWER IS NOT NULL
ORDER BY QUESTION_CODE) SUB;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_avl_pat_ques:'||VC_AVL_PAT_QUES||
' vn_avl_pat_ques_cnt:'||VN_AVL_PAT_QUES_CNT);
<<CASE_1_AND_2>>
IF
VC_AVL_PAT_QUES = VC_ACTUAL_QUES THEN
VC_EXACT_BOOLEAN_VAL := 'TRUE';
VC_COMMENTS := 'AOE AVAILABLE';
ELSIF--<<case_1_and_2>>
(VC_AVL_PAT_QUES != VC_ACTUAL_QUES OR VC_AVL_PAT_QUES IS NULL) AND
VN_AVL_PAT_QUES_CNT >= 0 THEN
VC_EXACT_PAR_BOOLEAN_VAL := 'TRUE';
VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE';
END IF;--<<case_1_and_2>>
ELSIF
VN_EXACT_PAT_ID_CNT = 0 AND
VN_ITERATION_RUN > 1 THEN
VC_EXACT_PAR_BOOLEAN_VAL := 'TRUE';
VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE';
ELSIF--<<Main_if_block>>
VN_EXACT_PAT_ID_CNT = 0 THEN
<<DUPL_PAT_LOOP>>
FOR PAT_ID_REC IN(SELECT DISTINCT PATIENT_ID
FROM PATIENT P
WHERE P.ABCDEF_MRN = IN_ABCDEF_MRN
AND EXISTS(SELECT 1 FROM EMR_ADTAOE_DTL EAD
WHERE EAD.PATIENT_ID = P.PATIENT_ID
AND EAD.TEST_ID = AOE_REC.TEST_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (EAD.DRAW_DATE = IN_DRAW_DT
OR EAD.DRAW_DATE = TO_DATE('2999/12/31','YYYY/MM/DD'))
AND EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM)
AND P.PATIENT_ID != IN_PATIENT_ID)
LOOP
--Collecting avaliable questions in emr_adtaoe_dtl
SELECT STRAGG(SUB.QUESTION_CODE), COUNT(QUESTION_CODE)
INTO VC_DUP_PAT_QUES, VN_DUP_PAT_QUES_CNT
FROM (SELECT QUESTION_CODE FROM EMR_ADTAOE_DTL
WHERE TEST_ID = AOE_REC.TEST_ID
AND PATIENT_ID = PAT_ID_REC.PATIENT_ID
AND FACILITY_ID = IN_FACILITY_ID
AND (DRAW_DATE = IN_DRAW_DT
OR DRAW_DATE = TO_DATE('2999/12/31','YYYY/MM/DD'))
AND SOURCE_SYSTEM = IN_CORP_ACRONYM
AND ANSWER IS NOT NULL
ORDER BY QUESTION_CODE) SUB;
<<CASE_3_AND_4>>
IF
VC_DUP_PAT_QUES = VC_ACTUAL_QUES THEN
VC_DUPL_BOOLEAN_VAL := 'TRUE';
VC_COMMENTS := 'AOE AVAILABLE FOR DUPLICATE PATIENT';
ELSIF
VC_DUP_PAT_QUES != VC_ACTUAL_QUES AND
VN_DUP_PAT_QUES_CNT >= 0 THEN
VC_DUPL_PAR_BOOLEAN_VAL := 'TRUE';
VC_PAR_COMMENTS := 'PARTIAL AOE AVAILABLE FOR DUPLICATE PATIENT';
END IF;--<<case_3_and_4>>
VN_DUPL_PAT_ID := PAT_ID_REC.PATIENT_ID;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_dup_pat_ques:'||VC_DUP_PAT_QUES||
' vn_dup_pat_ques_cnt:'||VN_DUP_PAT_QUES_CNT||
' VC_COMMENTS:'||VC_COMMENTS||
' VC_PAR_COMMENTS:'||VC_PAR_COMMENTS);
END LOOP DUPL_PAT_LOOP;
VC_CHK_FOR_EXT_ID := 'Y';
IF
VC_CHK_FOR_EXT_ID = 'Y' THEN
<<EXTERNAL_ID_LOOP>>
FOR P_PAT_EXT_ID_REC IN (SELECT DISTINCT P.EXTERNAL_ID
FROM PATIENT P
WHERE P.ABCDEF_MRN = IN_ABCDEF_MRN
AND P.EXTERNAL_ID IS NOT NULL)
LOOP
INSERT INTO TT_A04_OBX_QUES_ANS_DTL
(SELECT IAOBX.MSG_ID, IAOBX.OBSERVATION_IDENTIFIER, IAOBX.OBSERVATION_VALUE, IAM.UOM
FROM INTERFACE_A04_OBX_SEGMENT IAOBX, INTERFACE_ADT_AOE_MASTER IAM
WHERE IAOBX.OBSERVATION_IDENTIFIER = IAM.QUESTION_CODE
AND (IAOBX.OBSERVATION_DTM = TO_CHAR(IN_DRAW_DT,'YYYYMMDD')
OR IAOBX.OBSERVATION_DTM = TO_CHAR(TO_DATE('2999/12/31','YYYY/MM/DD'),'YYYYMMDD'))
AND IAOBX.MSG_ID IN (SELECT IPID.MSG_ID
FROM INTERFACE_A04_PID_SEGMENT IPID
WHERE IPID.PATIENT_ID_EXTERNAL = P_PAT_EXT_ID_REC.EXTERNAL_ID
AND IPID.MSG_ID IN (SELECT IMSH.MSG_ID
FROM INTERFACE_A04_MSH_SEGMENT IMSH
WHERE (TRIM('W' FROM SUBSTR(IMSH.SENDING_FACILITY,5,LENGTH(IMSH.SENDING_FACILITY))) = IN_ACCOUNT_NUMBER
OR SUBSTR(IMSH.SENDING_FACILITY,2,LENGTH(IMSH.SENDING_FACILITY)) = IN_HLAB_NUM))));
BEGIN
SELECT STRAGG(SUB3.OBSERVATION_IDENTIFIER), COUNT(OBSERVATION_IDENTIFIER)
INTO VC_OBX_QUES, VC_OBX_QUES_CNT
FROM (SELECT DISTINCT OBSERVATION_IDENTIFIER
FROM TT_A04_OBX_QUES_ANS_DTL
ORDER BY OBSERVATION_IDENTIFIER)SUB3;
IF
VC_OBX_QUES = VC_ACTUAL_QUES THEN
VC_COMMENTS := 'AOE RECEIVED IN A REJECTED ADT';
VC_REJECTED_BOOLEAN_VAL := 'TRUE';
ELSIF
VC_OBX_QUES != VC_ACTUAL_QUES AND
VC_OBX_QUES_CNT > 0 THEN
VC_PAR_COMMENTS := 'PARTIAL AOE RECEIVED IN A REJECTED ADT';
VC_REJECTED_PAR_BOOLEAN_VAL := 'TRUE';
END IF;
VN_EXTERNAL_ID := P_PAT_EXT_ID_REC.EXTERNAL_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
VC_REJECTED_BOOLEAN_VAL := 'FALSE';
VC_REJECTED_PAR_BOOLEAN_VAL := 'FALSE';
END;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_obx_ques:'||VC_OBX_QUES||
' vc_obx_ques_cnt:'||VC_OBX_QUES_CNT);
END LOOP EXTERNAL_ID_LOOP;
END IF;
END IF;--<<Main_if_block>>
END LOOP AOE_TEST_LOOP;
--Returning output as per the execution result.
IF
VC_EXACT_BOOLEAN_VAL = 'TRUE' AND
VC_EXACT_PAR_BOOLEAN_VAL = 'FALSE' THEN
OV_COMMENTS := VC_COMMENTS;
VC_DUPL_BOOLEAN_VAL := NULL;
VC_DUPL_PAR_BOOLEAN_VAL := NULL;
VC_REJECTED_BOOLEAN_VAL := NULL;
VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_EXACT_PAT := 'Y';
ELSIF
--VC_EXACT_BOOLEAN_VAL = 'TRUE' AND
VC_EXACT_PAR_BOOLEAN_VAL = 'TRUE' THEN
OV_COMMENTS := VC_PAR_COMMENTS;
VC_DUPL_BOOLEAN_VAL := NULL;
VC_DUPL_PAR_BOOLEAN_VAL := NULL;
VC_REJECTED_BOOLEAN_VAL := NULL;
VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_EXACT_PAT := 'Y';
END IF;
IF
VC_RETURN_EXACT_PAT = 'Y' THEN
--Returning result set (OV_COMMENTS,Question and Answer) for the exact patient.(Case 1 (AOE) and 2 (PARTIAL AOE))
SELECT MAX (SUB.COUNT_QUES_ANS)
INTO VN_MAX_COUNT FROM (SELECT COUNT(*) OVER (PARTITION BY EAD.QUESTION_CODE, EAD.ANSWER) AS COUNT_QUES_ANS
FROM EMR_ADTAOE_DTL EAD , INTERFACE_ADT_AOE_MASTER IAM, TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = IN_PATIENT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_REQUISITION_NUMBER) SUB;
IF
VN_MAX_COUNT > 1 THEN
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'exact patient duplicate scenario'||' vn_max_count:'||VN_MAX_COUNT);
OPEN VR_QUES_AND_ANS FOR
SELECT DISTINCT IAM.QUESTION_CODE,
(SELECT DISTINCT CASE
WHEN EAD.ANSWER IS NULL THEN NULL
WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
ELSE TO_CHAR(TRUNC(EAD.ANSWER * DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
END
FROM EMR_ADTAOE_DTL EAD , TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = IN_PATIENT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD.ANSWER IS NOT NULL
AND EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
) AS ANSWER
FROM INTERFACE_ADT_AOE_MASTER IAM
WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND IAM.TEST_CODE IN (SELECT ORD.TEST_CODE
FROM ORDER_REQUISITION_DETAIL ORD
WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
FROM ORDER_REQUISITION_HEADER ORH
WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)
AND EXISTS (SELECT 1 FROM EMR_ADTAOE_DTL EAD1, INTERFACE_ADT_AOE_MASTER IAM1, TEST T1
WHERE ORD.TEST_ID = EAD1.TEST_ID
AND IAM1.TEST_CODE = T1.TEST_CODE
AND EAD1.SOURCE_SYSTEM = IAM1.SOURCE_SYSTEM
AND EAD1.QUESTION_CODE = IAM1.QUESTION_CODE
AND EAD1.PATIENT_ID = IN_PATIENT_ID
AND EAD1.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD1.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD1.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD1.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD1.ANSWER IS NOT NULL
AND EAD1.STATUS = DECODE(IAM1.MATCH_TYPE, 'AT', EAD1.STATUS, 'N')));
ELSIF
VN_MAX_COUNT = 1 THEN
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'exact patient unique scenario'||' vn_max_count:'||VN_MAX_COUNT);
OPEN VR_QUES_AND_ANS FOR
SELECT DISTINCT IAM.QUESTION_CODE,
(SELECT DISTINCT CASE
WHEN EAD.ANSWER IS NULL THEN NULL
WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
ELSE TO_CHAR(TRUNC(EAD.ANSWER * DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
END
FROM EMR_ADTAOE_DTL EAD , TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = IN_PATIENT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD.ANSWER IS NOT NULL
AND EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
) AS ANSWER
FROM INTERFACE_ADT_AOE_MASTER IAM
WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND IAM.TEST_CODE IN (SELECT ORD.TEST_CODE
FROM ORDER_REQUISITION_DETAIL ORD
WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
FROM ORDER_REQUISITION_HEADER ORH
WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER));
END IF;
OR_QUES_AND_ANS := VR_QUES_AND_ANS;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_exact_boolean_val:'||VC_EXACT_BOOLEAN_VAL||
' vc_exact_par_boolean_val:'||VC_EXACT_PAR_BOOLEAN_VAL||
' OV_COMMENTS:'||OV_COMMENTS);
END IF;
IF
VC_DUPL_BOOLEAN_VAL = 'TRUE' AND
VC_DUPL_PAR_BOOLEAN_VAL = 'FALSE' THEN
OV_COMMENTS := VC_COMMENTS;
VC_EXACT_BOOLEAN_VAL := NULL;
VC_EXACT_PAR_BOOLEAN_VAL := NULL;
VC_REJECTED_BOOLEAN_VAL := NULL;
VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_DUPL_PAT := 'Y';
ELSIF
--VC_DUPL_BOOLEAN_VAL = 'TRUE' AND
VC_DUPL_PAR_BOOLEAN_VAL = 'TRUE' THEN
OV_COMMENTS := VC_PAR_COMMENTS;
VC_EXACT_BOOLEAN_VAL := NULL;
VC_EXACT_PAR_BOOLEAN_VAL := NULL;
VC_REJECTED_BOOLEAN_VAL := NULL;
VC_REJECTED_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_DUPL_PAT := 'Y';
END IF;
IF
VC_RETURN_DUPL_PAT = 'Y' THEN
--Returning result set (OV_COMMENTS,Question and Answer) for the duplicate patient.(Case 3 (AOE) and 4 (PARTIAL AOE))
SELECT MAX (SUB.COUNT_QUES_ANS)
INTO VN_MAX_COUNT FROM (SELECT COUNT(*) OVER (PARTITION BY EAD.QUESTION_CODE, EAD.ANSWER) AS COUNT_QUES_ANS
FROM EMR_ADTAOE_DTL EAD , INTERFACE_ADT_AOE_MASTER IAM, TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = VN_DUPL_PAT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_REQUISITION_NUMBER) SUB;
IF
VN_MAX_COUNT > 1 THEN
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'duplicate patient duplicate scenario'||' vn_max_count:'||VN_MAX_COUNT);
OPEN VR_QUES_AND_ANS FOR
SELECT DISTINCT IAM.QUESTION_CODE,
(SELECT DISTINCT CASE
WHEN EAD.ANSWER IS NULL THEN NULL
WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
ELSE TO_CHAR(TRUNC(EAD.ANSWER * DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
END
FROM EMR_ADTAOE_DTL EAD , TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = VN_DUPL_PAT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD.ANSWER IS NOT NULL
AND EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
) AS ANSWER
FROM INTERFACE_ADT_AOE_MASTER IAM
WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND IAM.TEST_CODE IN (SELECT ORD.TEST_CODE
FROM ORDER_REQUISITION_DETAIL ORD
WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
FROM ORDER_REQUISITION_HEADER ORH
WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER)
AND EXISTS (SELECT 1 FROM EMR_ADTAOE_DTL EAD1, INTERFACE_ADT_AOE_MASTER IAM1, TEST T1
WHERE ORD.TEST_ID = EAD1.TEST_ID
AND IAM1.TEST_CODE = T1.TEST_CODE
AND EAD1.SOURCE_SYSTEM = IAM1.SOURCE_SYSTEM
AND EAD1.QUESTION_CODE = IAM1.QUESTION_CODE
AND EAD1.PATIENT_ID = VN_DUPL_PAT_ID
AND EAD1.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD1.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD1.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD1.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD1.ANSWER IS NOT NULL
AND EAD1.STATUS = DECODE(IAM1.MATCH_TYPE, 'AT', EAD1.STATUS, 'N')));
ELSIF
VN_MAX_COUNT = 1 THEN
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'duplicate patient unique scenario'||' vn_max_count:'||VN_MAX_COUNT);
OPEN VR_QUES_AND_ANS FOR
SELECT DISTINCT IAM.QUESTION_CODE,
(SELECT DISTINCT CASE
WHEN EAD.ANSWER IS NULL THEN NULL
WHEN LENGTH(TRIM(TRANSLATE(EAD.ANSWER, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN EAD.ANSWER
ELSE TO_CHAR(TRUNC(EAD.ANSWER * DECODE(UPPER(IAM.UOM), 'KGS', 2.20462,1),2))
END
FROM EMR_ADTAOE_DTL EAD , TEST T
WHERE T.TEST_ID = EAD.TEST_ID
AND IAM.TEST_CODE = T.TEST_CODE
AND EAD.SOURCE_SYSTEM = IAM.SOURCE_SYSTEM
AND EAD.QUESTION_CODE = IAM.QUESTION_CODE
AND EAD.PATIENT_ID = VN_DUPL_PAT_ID
AND EAD.FACILITY_ID = IN_FACILITY_ID
AND (TRUNC(EAD.DRAW_DATE) = IN_DRAW_DT
OR TRUNC(EAD.DRAW_DATE) = TRUNC(TO_DATE('12-31-2999','mm-dd-yyyy')))
AND EAD.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND EAD.ANSWER IS NOT NULL
AND EAD.STATUS = DECODE(IAM.MATCH_TYPE, 'AT', EAD.STATUS, 'N')
) AS ANSWER
FROM INTERFACE_ADT_AOE_MASTER IAM
WHERE IAM.SOURCE_SYSTEM = IN_CORP_ACRONYM
AND IAM.TEST_CODE IN (SELECT ORD.TEST_CODE
FROM ORDER_REQUISITION_DETAIL ORD
WHERE ORD.REQUISITION_HDR_ID = (SELECT ORH.REQUISITION_HDR_ID
FROM ORDER_REQUISITION_HEADER ORH
WHERE ORH.REQUISITION_NUMBER = IN_REQUISITION_NUMBER));
END IF;
OR_QUES_AND_ANS := VR_QUES_AND_ANS;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_dup_pat_ques:'||VC_DUP_PAT_QUES||
' vc_dupl_boolean_val:'||VC_DUPL_BOOLEAN_VAL||
' vc_dupl_par_boolean_val:'||VC_DUPL_PAR_BOOLEAN_VAL||
' OV_COMMENTS:'||OV_COMMENTS);
END IF;
IF
VC_REJECTED_BOOLEAN_VAL = 'TRUE' AND
VC_REJECTED_PAR_BOOLEAN_VAL = 'FALSE' THEN
OV_COMMENTS := VC_COMMENTS;
VC_EXACT_BOOLEAN_VAL := NULL;
VC_EXACT_PAR_BOOLEAN_VAL := NULL;
VC_DUPL_BOOLEAN_VAL := NULL;
VC_DUPL_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_REJECT_PAT := 'Y';
ELSIF
--VC_REJECTED_BOOLEAN_VAL = 'FALSE' AND
VC_REJECTED_PAR_BOOLEAN_VAL = 'TRUE' THEN
OV_COMMENTS := VC_PAR_COMMENTS;
VC_EXACT_BOOLEAN_VAL := NULL;
VC_EXACT_PAR_BOOLEAN_VAL := NULL;
VC_DUPL_BOOLEAN_VAL := NULL;
VC_DUPL_PAR_BOOLEAN_VAL := NULL;
VC_RETURN_REJECT_PAT := 'Y';
ELSIF
VC_REJECTED_BOOLEAN_VAL = 'FALSE' AND
VC_REJECTED_PAR_BOOLEAN_VAL = 'FALSE' THEN
--Returning result set (OV_COMMENTS) for the rejected ADT.(Case 7)
OV_COMMENTS := 'AOE NOT RECEIVED IN ADT';
OR_QUES_AND_ANS := NULL;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_obx_ques:'||VC_OBX_QUES||
' vc_rejected_boolean_val:'||VC_REJECTED_BOOLEAN_VAL||
' vc_rejected_par_boolean_val:'||VC_REJECTED_PAR_BOOLEAN_VAL||
' OV_COMMENTS:'||OV_COMMENTS);
VC_EXACT_BOOLEAN_VAL := NULL;
VC_EXACT_PAR_BOOLEAN_VAL := NULL;
VC_DUPL_BOOLEAN_VAL := NULL;
VC_DUPL_PAR_BOOLEAN_VAL := NULL;
END IF;
IF
VC_RETURN_REJECT_PAT = 'Y' THEN
--Returning result set (OV_COMMENTS,Question and Answer) for the rejected ADT.(Case 5 (AOE) and 6 (PARTIAL AOE))
--In case of multiple external id with same patient, facility and draw date; the lastest record should be picked.
SELECT MAX(MSG_ID) INTO VN_MAX_MSG_ID FROM TT_A04_OBX_QUES_ANS_DTL;
OPEN VR_QUES_AND_ANS FOR
SELECT DISTINCT IAM.QUESTION_CODE,
(SELECT DISTINCT
CASE
WHEN TOBX.OBSERVATION_VALUE IS NULL THEN NULL
WHEN LENGTH(TRIM(TRANSLATE(TOBX.OBSERVATION_VALUE, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', ' '))) IS NULL THEN TOBX.OBSERVATION_VALUE
ELSE TO_CHAR(TRUNC(TOBX.OBSERVATION_VALUE * DECODE(UPPER(TOBX.UOM), 'KGS', 2.20462,1),2))
END
FROM TT_A04_OBX_QUES_ANS_DTL TOBX
WHERE TOBX.OBSERVATION_IDENTIFIER = IAM.QUESTION_CODE
AND TOBX.MSG_ID = VN_MAX_MSG_ID) AS ANSWER
FROM INTERFACE_ADT_AOE_MASTER IAM
WHERE SOURCE_SYSTEM = IN_CORP_ACRONYM;
OR_QUES_AND_ANS := VR_QUES_AND_ANS;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'vc_rejected_boolean_val:'||VC_REJECTED_BOOLEAN_VAL||
' vc_rejected_par_boolean_val:'||VC_REJECTED_PAR_BOOLEAN_VAL||
' OV_COMMENTS:'||OV_COMMENTS);
END IF;
SPL_SPN_ERROR_LOGGING_SPK.INFO_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => 'End of the procedure with Patient_Id:'||IN_PATIENT_ID||' Facility_Id:'||IN_FACILITY_ID||
' Draw_Dt:'||IN_DRAW_DT||' Requisition_Number:'||IN_REQUISITION_NUMBER||' Corp_Acronym:'||IN_CORP_ACRONYM||
' ABCDEF_Mrn:'||IN_ABCDEF_MRN||' Account_Number:'||IN_ACCOUNT_NUMBER||' Hlab_Num:'||IN_HLAB_NUM);
EXCEPTION
WHEN NO_DATA_FOUND THEN
SPL_SPN_ERROR_LOGGING_SPK.ERROR_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => SQLERRM);
WHEN OTHERS THEN
SPL_SPN_ERROR_LOGGING_SPK.ERROR_PROC
(IC_PACKAGE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IC_PROCEDURE_NAME => 'SPL_SPN_MISSING_EMR_AOE_DTL'
,IN_BATCH_ID => '100'
,IC_MESSAGE_TEXT => SQLERRM);
END SPL_SPN_MISSING_EMR_AOE_DTL;
Regards,
BS2012.Hey Guys,
I'm sorry, that I troubled you all. But I found the issue and solved it.
The actual problem is residing at that max of that partition by query. I had a misconception that this query will always return a value which is positive number like 1,2 etc.
But sometimes it's returning null as well. So the ref cursor is fetching nothing. Now I've modified my code and everything is working fine. Thanks for your help and support.
Regards,
BS2012. -
Can the return from xsql:ref-cursor-function be saved & looped through XSQL?
If <xsql:ref-cursor-function> returns one field for a number of rows, is there a way to save those values and loop through the data retrieved for other query process within XSQL? Any example?
Thanks.
nullYou have a couple of options.
You can process the XML returned by <Xsql:ref-cursor-function> as the normal part of XSLT processing, or you can write a custom action handler that aggregates the action handler for <xsql:ref-cursor-function> and then uses DOM to operate on the return value.
Search the Online XSQL Pages Documentation for the term "MyIncludeXSQLHandler" for some sample code that illustrates building a customer action handler that aggregates one of the built-in handlers. -
Ref Cursor closed returning to Form
Hi,
I came across this old thread which seems to be an exact match for my problem.
sys ref cursor is closed
And whereas the solutions do work as stated there is an issue with it that i wonder if anyone here has since got around.
Take those examples and make the sql dynamic. on return to the form the ref cursor is instantaneouly closed for you making the thing unusable.
i.e.
OPEN cur FOR SELECT 'x' from dual
works just fine but
OPEN cur FOR 'SELECT ''X'' from dual'
resutls in an closed cursor the moment the ref cursor parameter returns to the form. I need the dynamic form because my cursor is truly built dynamically.
Any ideas anyone?Hi,
try this :
1. declare in the package specification
TYPE rec_view IS RECORD(
COL1 VARCHAR2(250),
COL2 VARCHAR2(250),
COL3 VARCHAR2(250),
COL4 VARCHAR2(250),
COL5 VARCHAR2(250)
TYPE t_ref_curs IS REF CURSOR RETURN rec_view;
TYPE t_rec_c IS REF CURSOR;
2. define the dynamic sql - procedure
PROCEDURE prc_getdata (p_refcur IN OUT t_ref_curs, p_result OUT VARCHAR2,
p_filter IN varchar2 DEFAULT NULL, p_orderby In VARCHAR2 DEFAULT NULL) IS
BEGIN
-- dyn cursor ! --
EXECUTE IMMEDIATE
'BEGIN
OPEN :a FOR ' ||
' select empno, ename, job, mgr, hiredate, sal from emp'||' '||
p_filter ||' '||
p_orderby ||'; '||
'END;'
USING p_refcur;
END prc_getdata;
3. define in the Form a PL/SQL based block on this procedure.
Hope it helps.
Best regards
Friedhold -
XSQL ERROR with bind-params in ref-cursor-function
Hi Steve
I always get the error
ORA-01006 bind variable does not exist
when using a bind variable in a <xsql:ref-cursor-function> action element.
when I replace the bind variable with a @ - parameter substitution, all works fine.
My configuration:
XSQL 1.0.4.1 on Win200Pro ,Apache + Jserv + DB from ORA 8.1.7 installation
My Source
<xsql:ref-cursor-function
dbconn="ekat"
eblike="%"
list="a0"
bind-params="eblike"
include-schema="no"
null-indicator="no"
id-attribute=""
fetch-size="500"
>
{@dbconn}o.ekatkategcv.open_cv_ebh ('{@list}', :1)
</xsql:ref-cursor-function>
( dbconn selects my schema, not changed often, which contains package ekatkategcv with
function open_cv_ebh returning a cursor)
Any fix would be appreciated to avoid reparsing on each call.
BTW, is it right, that a ref-cursor funtion is reparsed whenever the content of
a parameter used with @ changes?
Best regards
H.Buschmann ([email protected])
nullI have tried it using ? instead of :1, this method works fine.
I haven't tried the name method (:bindvar) yet.
Until now, I only used xsl:query and xsql:ref-cursor-function, so I didn't check
the other action handlers with bind variables like :1
null -
Regarding the Ref Cursor functional;ity
HI,
I am using ref cursor to return Result Set to .Net.
I am in doubt that , Is it requires multiple server trips to fill the DataSet at front end.
As my assumption it will return the address of the work area provided in Oracle server. After that for each row it make a server trip .
Is my assumption is right ?
Can any one tell me the functionality behind returning a Ref Cursor .
Thank you....This is (or ought to be) configurable on the .NET side. There will be a server round-trip to fetch every N records where N is a setting on the client. I'm not particularly experienced with .NET, so I'm not sure where this setting is set, but the folks over in the .NET forum might.
Justin
Distributed Database Consulting, Inc.
http://www.ddbcinc.com/askDDBC -
Unable to see function return values in Visual Studio 2013 debugger
Hi!
I can't see function return values in
Microsoft Visual Studio Ultimate 2013
Version 12.0.31101.00 Update 4
Microsoft .NET Framework
Version 4.5.51650
Installed Version: Ultimate<o:p></o:p>
as described in http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx
So what can I do to get this functionality back?
MsdnMezzoHi MsdnMezzo,
Reference:
http://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx
If use the same sample in the above blog provided by you, how about the result? Could you debug it with the same steps? I could debug it in my side using the VS2013.
So to make sure that whether it is your VS IDE issue, please debug it with this sample, if it works well, I doubt that we would think about your specific project and the debugging steps.
If so, to really repro this issue, could you share us a sample with one drive? You could upload your project to one drive and share us the downloaded link in your new reply, I will download and repro this issue in my side.
Best Regards,
Jack
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
I want to call Stored Procedure that return records and output parameter, from CVI
I can get output parrameter but when I want to get records stream I recieve following wrror:
function return value == -10. Native error code -2146824584 ADOBD.Recordset: Operation is not allowed when object is closedin Stored procedure I create table variable and and insert into string values
when I remove usage of table variable the error desappear -
Call ref cursor functions in function also returning ref cursor?
In 10g database, I have several functions and procedures, some packaged, that return ref cursors. These work as expected.
Is there a way to call one or more of these in a new function and return another ref cursor?
I know this doesn't work, but I hope it conveys the idea.
function f_get_order_lines
return sys_refcursor -- or defined ref cursor
is
v_ords orders_rcr;
v_lines lines_rcr;
x sys_refcursor;
begin
v_ords := f_get_orders;
for rec in v_ords
loop
v_lines := f_get_lines;
... do other work here...
end loop;
return x;
end;Pipelined table functions might do the trick for you, depending you your requirements and the transformations you need to make:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2345 -
How to get a stored function return value (which is not a cursor)?
I want to do so with ADO inside Visual Basic. I know how to call a stored procedure, but nothing I tried could help me in calling a stored function and getting its return code. Note that the function has no cursors within its argument or return code.
Your quick response would be appreciated
EyalEyal,
A stored function returns a value. You need to have the first parameter (of correct data type) for the returned value. The parameter binding is pretty much the same as you would do with stored procedures.
e.g. "begin :1= proc(....); end;"
Sinclair -
Using CRUD procedures to update data and ref cursors to return data
Hi:
I am currently evaluating Apex 3.x to replace an existing app that uses lots of procedures to update and return data.
1. Is it possible to return data from a function that returns a cursor (or from a procedure that has an input/output ref cursor parameter for that matter) ? Example: Let's say I have the following function in a package:
function get_data return sys_refcursor
is
l_cursor sys_refcursor;
begin
open l_cursor for select sysdate as field from sys.dual;
return l_cursor;
end;
Can I add a page with a table that is populated based on this function? Based on my research it is not possible, but I want an APEX expert to confirm it
2. The old application uses CRUD procedures to update date, that is for each table there are 3 procedures, insert update and delete. Question: is it possible to channel all the update, inserts and deletes through these procedures? Furthermore, in lots of cases I use sequences to populate the primary keys, and the new value is returned as output parameter. Can I retrieve the output value and use it maybe in the next page I am branching to?
In the samples that I've seen the same form is used for insert and update. How do I distinguish between the two modes?
3. Can you please point me to some samples that show how to do 1 & 2. The standard samples that I've seen use the automatic row processing.
4. Could you please recommend some good books about Apex or HTML db? I found the documentation unintuitive. It is hard to picture quickly how things tie together by reading this documention. I wish the documentation was more task oriented and presented 'how to...' implement generic patterns used in web apps.
Thank you in advanceHi guys
Check out the last 2 posts in this thread for ideas on how to implement 1.
Report on user data from LDAP
Varad -
Ref cursor not returning any data
Hi
How can I raise an exception when ref cursor is not retrieving any data.
create or replace function getempdetails(p_deptno in number)
return sys_refcursor
is
v_refcursor sys_refcursor;
begin
open v_refcursor for
select * from emp
where deptno = p_deptno;
return v_refcursor;
exception
when no_data_found then
dbms_output.put_lline('No data available for p_deptno');
end;
Say for example p_deptno = 12
Thanks
Raghu
Message was edited by:
user584123It is useless but... you can do this
create or replace function getempdetails(
p_deptno in number
return sys_refcursor
is
v_refcursor sys_refcursor;
flag number;
begin
select count(*)
into flag
from emp
where deptno = p_deptno
and rownum = 1;
if ( flag = 0) then
dbms_output.put_lline('No data available for p_deptno');
return null;
else
open v_refcursor for
select * from emp
where deptno = p_deptno;
return v_refcursor;
end if;
end;Bye Alessandro
Message was edited by:
Alessandro Rossi
Or this
create or replace function getempdetails(
p_deptno in number
return sys_refcursor
is
v_refcursor sys_refcursor;
flag number;
begin
select 1
into flag
from emp
where deptno = p_deptno
and rownum = 1; -- This throws the exception
open v_refcursor for
select * from emp
where deptno = p_deptno;
return v_refcursor;
end; -
Group by on Function return value
Dear All
I'm facing a problem with when I have a group by on the return value of a function.
Following is the scenario.
Im having the following select query which executes in less than millisec for more than 20k records.
SELECT T1.FIELD1,T1.FIELD2, MY_FUNCTION(T1.FIELD2) FROM TABLE T1 ;
But when I modify the above query in the following way for the same number of records, the performance is going down to more than 4 mts.
SELECT T1.FIELD1,T1.FIELD2, MY_FUNCTION(T1.FIELD2)FIELD3 FROM TABLE T1 GROUP BY T1.FIELD1,T1.FIELD3;
can any one please suggest me whats the best solution in this regard.
Thanks in advance
NarayananSQL> create or replace function get_sub(a varchar2)
2 return varchar2
3 is
4 begin
5 return substr(a,1,1);
6 end;
7 /
Function created.
SQL> select deptno, get_sub(ename) sub from emp;
DEPTNO S
20 S
30 A
30 W
20 J
30 M
30 B
10 C
20 S
10 K
30 T
20 A
30 J
20 F
10 M
14 rows selected.
SQL> select deptno, get_sub(ename) sub, count(1)
2 from emp
3 group by deptno, get_sub(ename)
4 /
DEPTNO S COUNT(1)
10 C 1
10 K 1
10 M 1
20 A 1
20 F 1
20 J 1
20 S 2
30 A 1
30 B 1
30 J 1
30 M 1
30 T 1
30 W 1
13 rows selected.Rgds.
Everything which is not affected by aggregate functions
should be included into GROUP BY. And GROUP BY can't use
aliases but expressions only.
You have to think what exactly do you want to get
for FIELD02 - do you want get max/min/avg/count ?
Message was edited by:
dnikiforov
(I'm asking because your query probably should look like
SELECT T1.FIELD1,T1.FIELD2, MY_FUNCTION(T1.FIELD2) FIELD3 FROM TABLE T1 GROUP BY T1.FIELD1,T1.FIELD2
Message was edited by:
dnikiforov -
Data Services Designer - Function returns value, but doesnt always populate
Within my Query Transform I call a function that I pass a old Vendor code to a sql statement and it does a few lookups and cross references it returns a new value. My issue is sometime it doesnt put the value in the field. I know it has returned a value as I had the funtion print it out for me, so I can see the value that was passed and the returning value, but when I look in my table there is no value.
I have added the function call for you to see it is very simple takes one parameter, I have also added the print out from my function, does anyone have any ideas??
(This is under the field Vendor Code)
P2CMM05_Look_UP_Vendor_Code(Query.LIFNR)
6088 4800 PRINTFN 6/28/2011 9:27:48 AM @@@@@@@@@@@ Ret_Vendor_code @@@@@@@@@@@ MCI_719
6088 4800 PRINTFN 6/28/2011 9:27:48 AM @@@@@@@@@@@ $Vendor_code @@@@@@@@@@@ MUR_51Within my Query Transform I call a function that I pass a old Vendor code to a sql statement and it does a few lookups and cross references it returns a new value. My issue is sometime it doesnt put the value in the field. I know it has returned a value as I had the funtion print it out for me, so I can see the value that was passed and the returning value, but when I look in my table there is no value.
I have added the function call for you to see it is very simple takes one parameter, I have also added the print out from my function, does anyone have any ideas??
(This is under the field Vendor Code)
P2CMM05_Look_UP_Vendor_Code(Query.LIFNR)
6088 4800 PRINTFN 6/28/2011 9:27:48 AM @@@@@@@@@@@ $Vendor_code @@@@@@@@@@@ MUR_51
6088 4800 PRINTFN 6/28/2011 9:27:48 AM @@@@@@@@@@@ Ret_Vendor_code @@@@@@@@@@@ MCI_719 -
REF CURSOR not returned to "Output Variables"
I have a poorly performing procedure that returns a Ref Cursor. I can retrieve the Ref Cursor via Crystal Reports, so I know that it is working. However, the data is not showing up in the "Output Variables" section on SQL Developer version 3.1.07.42.
I have other procs that run much faster and the data shows up just fine for them.
I'm wondering if the fact that the query runs in about 4 minutes is causing the results to be lost?
Oracle 11.2.0.3.0 64 bit on AIX version 6.
Sql Developer 3.1.07.42.
Thanks.Can't reproduce. Test case:
<code>
create or replace
package pivot
as
type rc is ref cursor;
procedure tst4( c1 in out rc, c2 out rc, i out integer, c4 out rc );
end;
create or replace
package body pivot
as
procedure tst4( c1 in out rc, c2 out rc, i out integer, c4 out rc ) is
stmt1 long;
stmt2 long;
stmt3 long;
stmt4 long;
begin
stmt1 := 'select 11 one, 12 two, ''a'' from dual union select 21 one, 22 two, ''b'' from dual';
open c1 for stmt1;
stmt2 := 'select 2 from dual';
select count(1) into stmt4 from dual -- simulated delay
connect by level < 40000000;
open c2 for stmt2;
i:=42;
stmt4 := 'select level from dual connect by level < 7';
open c4 for stmt4;
end;
end;
Maybe you are looking for
-
When I send a text message to my wife, it comes across on her ipad and not her phone
When I send a text message to my wives phone, It comes across on her ipad and not her iphone. I want it to go on the phone and not the ipad. Can anyone help? Thanks, Bob
-
SAP ECC 6.0 - Using BAPIs for C# to extract data out
I have had a client recommend a strategy of extracting data usin C# (Visual Studio 2005) to extract data from SAP ECC using BAPIs. We do have an existing methodology in place using flat files to extract data to non SAP systems We have purchase XI whi
-
I am trying to copy songs to an sd card for a digital photo frame. I changed my settings in iTunes to mp3 format before I downloaded them but it did not work. What am I doing wrong? When I play the sd card in my mac or on a lenovo laptop it works but
-
Cannot Open CR2 Files with v6.0
I recently bought a Canon 7D and discovered that I cannot open its CR2 files with Elements 6.0. Am I forced to upgrade to a new version?
-
How can I lock labview window so casual user can't move/access desktop?
I'm developing a vi for a museum exhibit and would like to keep visitors from getting to desktop and quick launch bar. seems i can do everything else via window appearance except stopping window dragging.