【问题标题】:Watching .net-Oracle stored procedures calls to see parameter list观看 .net-Oracle 存储过程调用以查看参数列表
【发布时间】:2012-01-29 04:35:57
【问题描述】:

我想知道是否有某种方法可以查看从 .net 方法调用的存储过程的参数列表。我不断收到一个

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

ORA-06550:第 1 行,第 7 列

每当我调用我的存储过程时都会出现异常。我查看了为拨打电话而设置的对象,似乎我设置正确。我知道我要展示代码来证明这一点,我会大声疾呼,但我循环遍历一个 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 调用它时,它似乎工作得很好。

【问题讨论】:

    标签: oracle stored-procedures plsql oracle11g odp.net


    【解决方案1】:

    实际上,我在 Oracle 参数列表中计算了 32 个参数,而您只用 31 个参数来调用它。这并不能真正回答问题,而是导致您出错的原因。

    有很多方法可以从 Oracle 中找出参数列表。你可以使用describe或者存储过程dbms_metadatadbms_describe;然后是系统表和视图,all_proceduresuser_arguments 等。

    user_arguments 可能是最有可能对您有用的一个。

    【讨论】:

    • 第一个观察值本身就是它的黄金重量。我猜前三个是某种命令(或存储的过程调用)。 user_arguments 听起来会很不错。我需要对用户的会话采取行动(当他调用存储过程时)还是有某种方式可以查看历史数据?
    • 我真是个傻瓜。我一直忘记在调用函数之前我在该列表的末尾附加了一个参数。我将更新代码以显示这一点。我必须每天至少为此而堕落两次。
    • 第一个是SQL*Plus,dbms_...确实是stored_procs(它们都是各种方法描述的链接)。 User 在这种情况下意味着 schema 因此,只要您在与执行 proc 的架构相同的架构中访问或使用这里的任何内容,您应该不会有任何问题。据我所知,无法查看系统表的历史记录;因为一旦它们在那里更新,它们就在那里。您应该使用某种形式的版本控制软件,这样您才能看到您的 proc 以前的样子?
    猜你喜欢
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 2013-11-08
    • 2011-01-22
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多