2011-12-28 32 views
0

我想知道是否有某種方法來查看從.net方法調用的存儲過程的參數列表。每當我打電話給我的存儲過程的第1行,第7列監視.net-Oracle存儲過程調用以查看參數列表

例外:我不斷收到

PLS-00306: wrong number or types of arguments in call to 'SPPUT_FOCUSEDREADMIT' 

ORA-06550。我查看了我設置的用於進行呼叫的對象,並且似乎正確設置了它。我知道會有嚎叫讓我展示代碼來證明它,但是我通過XML文檔循環來填充ODP.net的cmd.Parameters對象...因此,我將向您展示我使用XPath來正確的節點和存儲過程的參數列表...沒有必要顯示所有的代碼...

string[] paths = new string[31]; 
     paths[0] = "EncounterId"; 
     paths[1] = "PopulationPatientID"; 
     paths[2] = "EMPIID"; 
     paths[3] = "Active"; 
     paths[4] = "FirstName"; 
     paths[5] = "LastName"; 
     paths[6] = "DateOfBirth"; 
     paths[7] = "Phone"; 
     paths[8] = "HospitalFinNumber"; 
     paths[9] = "AdmitDate"; 
     paths[10] = "MRNType"; 
     paths[11] = "MRN"; 
     paths[12] = "PatientRoomPhone"; 
     paths[13] = "DischargeDateTime"; 
     paths[14] = "DischargeDisposition"; 
     paths[15] = "DischargeTo"; 
     paths[16] = "DischargeAdvocateCall"; 
     paths[17] = "Payor"; 
     paths[18] = "HomeHealthCareAccepted"; 
     paths[19] = "SafeLandingAccepted"; 
     paths[20] = "PCPName"; 
     paths[21] = "PCPPhone"; 
     paths[22] = "SpecialistName"; 
     paths[23] = "SpecialistPhone"; 
     paths[24] = "PCPAppointmentDateTime"; 
     paths[25] = "PCPAppointmentLocation"; 
     paths[26] = "SpecialistAppointmentDateTime"; 
     paths[27] = "SpecialistAppointmentLocation"; 
     paths[28] = "CompletedPathway"; 
     paths[29] = "CompletedPathwayReason"; 
     paths[30] = "Comment"; 

     string[] colName = new string[31]; 
     colName[0] = "FOCUSED_READMISSIONS_IDIn"; 
     colName[1] = "POPULATION_PATIENT_IDIn"; 
     colName[2] = "EMPIin"; 
     colName[3] = "ACTIVEIn"; 
     colName[4] = "FIRST_NAMEin"; 
     colName[5] = "LAST_NAMEin"; 
     colName[6] = "DOBin"; 
     colName[7] = "PHONEin"; 
     colName[8] = "HOSPITAL_FIN_NUMBERin"; 
     colName[9] = "ADMIT_DATEin"; 
     colName[10] = "MRN_TYPEin"; 
     colName[11] = "MRNin"; 
     colName[12] = "PATIENT_ROOM_PHONEin"; 
     colName[13] = "DISCHARGE_DATEin"; 
     colName[14] = "DISCHARGE_DISPOSITIONin"; 
     colName[15] = "DISCHARGE_TOin"; 
     colName[16] = "DISCHARGE_ADVOCATE_CALLin"; 
     colName[17] = "PAYORin"; 
     colName[18] = "HOME_HEALTHCARE_ACCEPTEDin"; 
     colName[19] = "SAFE_LANDING_ACCEPTEDin"; 
     colName[20] = "PCP_NAMEin"; 
     colName[21] = "PCP_PHONEin"; 
     colName[22] = "SPECIALIST_NAMEin"; 
     colName[23] = "SPECIALIST_PHONEin"; 
     colName[24] = "PCP_APPOINTMENT_DATETIMEin"; 
     colName[25] = "PCP_APPOINTMENT_LOCATIONin"; 
     colName[26] = "SPECIALIST_APPT_DATETIMEin"; 
     colName[27] = "SPECIALIST_APPT_LOCATIONin"; 
     colName[28] = "COMPLETED_PATHWAYin"; 
     colName[29] = "COMPLETED_PATHWAY_REASONin"; 
     colName[30] = "COMMENTSin"; 

這裏是存儲過程的參數列表...

FOCUSED_READMISSIONS_IDIn NUMBER, 
POPULATION_PATIENT_IDIn  NUMBER, 
EMPIin      VARCHAR2, 
FIRST_NAMEin    VARCHAR2, 
LAST_NAMEin     VARCHAR2, 
DOBin      VARCHAR2, 
PHONEin      VARCHAR2, 
HOSPITAL_FIN_NUMBERin  VARCHAR2, 
ADMIT_DATEin    VARCHAR2, 
MRN_TYPEin     VARCHAR2, 
MRNin      VARCHAR2, 
PATIENT_ROOM_PHONEin  VARCHAR2, 
DISCHARGE_DATEin   VARCHAR2, 
DISCHARGE_DISPOSITIONin  VARCHAR2, 
DISCHARGE_TOin    VARCHAR2, 
DISCHARGE_ADVOCATE_CALLin VARCHAR2, 
PAYORin      VARCHAR2, 
HOME_HEALTHCARE_ACCEPTEDin VARCHAR2, 
SAFE_LANDING_ACCEPTEDin  VARCHAR2, 
PCP_NAMEin     VARCHAR2, 
PCP_PHONEin     VARCHAR2, 
SPECIALIST_NAMEin   VARCHAR2, 
SPECIALIST_PHONEin   VARCHAR2, 
PCP_APPOINTMENT_DATETIMEin VARCHAR2, 
PCP_APPOINTMENT_LOCATIONin VARCHAR2, 
SPECIALIST_APPT_DATETIMEin VARCHAR2, 
SPECIALIST_APPT_LOCATIONin VARCHAR2, 
COMPLETED_PATHWAYin   VARCHAR2, 
COMPLETED_PATHWAY_REASONin VARCHAR2, 
COMMENTSIn     VARCHAR2, 
ACTIVEIn     VARCHAR2, 
ACTIVE_DATEIn    VARCHAR2 

但是那段代碼並不重要。當我從.net函數調用存儲過程時,如何查看正在發送的內容。因爲當我從sql Developer調用它時,它似乎工作得很好。

回答

1

實際上,我在Oracle參數列表中計數了32個參數,並且只用31調用它。哪個並不真正回答這個問題,而是您錯誤的原因。

有很多方法可以找到Oracle的參數列表。您可以使用describe或存儲過程dbms_metadata,dbms_describe;然後是系統表格和視圖,all_procedures,user_arguments等。

user_arguments可能是最有可能對您有用的一個。

+0

單是第一次觀察值得是黃金的重量。我猜這些前三個是某種類型的命令(或存儲的proc調用)。 user_arguments聽起來很不錯。我需要對用戶的會話採取行動嗎(當他調用存儲過程時)還是以某種方式查看歷史數據? – SoftwareSavant 2011-12-28 13:34:46

+0

我真是個傻瓜。在我進行函數調用之前,我一直忘記我在該列表的末尾追加了一個參數。我將更新代碼以表明這一點。我必須每天至少參加兩次。 – SoftwareSavant 2011-12-28 13:52:00

+0

第一個是SQL * Plus,'dbms _...'確實是stored_procs(它們是指向各種方法描述的所有鏈接)。在這個上下文中,'User'的意思是'schema',因此,只要你在你執行proc的模式中使用相同的模式,你就不應該在這裏訪問或使用任何問題。據我所知,沒有辦法查看系統錶的歷史記錄;因爲一旦他們在那裏被更新,他們就是。你應該使用某種形式的版本控制軟件,這樣你可以看到你的過程是什麼樣子? – Ben 2011-12-28 13:55:10

相關問題