我已经编写了下面的存储过程来检索要发送到我的C#应用程序的DataSet的数据。Oracle存储过程问题
您能否为我的存储过程建议一个更强大的设计?我假设这不是返回记录集的最佳方式。
CREATE OR REPLACE PROCEDURE GET_EMPLOYEE_DATA
(
EMPLOYEE_EMAIL IN VARCHAR2,
EMP_RECORD_SET1 OUT SYS_REFCURSOR,
EMP_RECORD_SET2 OUT SYS_REFCURSOR,
EMP_RECORD_SET3 OUT SYS_REFCURSOR,
EMP_RECORD_SET4 OUT SYS_REFCURSOR
) AS
BEGIN
OPEN EMP_RECORD_SET1 FOR
SELECT EMPLOYEENAME AS EMP_NAME,
EMPLOYEELASTNAME AS EMP_LAST_NAME,
EMPLOYEEFIRSTNAME AS EMP_FIRST_NAME
FROM EMP.EMPLOYEES
WHERE EMP_EMAIL = EMPLOYEE_EMAIL
;
OPEN EMP_RECORD_SET2 FOR
SELECT EMPLOYEEADD AS EMP_ADDRESSESS,
EMPLOYEECITY AS EMP_CITY,
EMPLOYEE_STATE AS EMP_STATE
FROM EMP.EMPLOYEES_ADDRESSES
WHERE EMP_EMAIL = EMPLOYEE_EMAIL;
OPEN EMP_RECORD_SET3 FOR
SELECT EMPLOYEEPHONE AS EMP_PHONE,
EMPLOYEEEXTENSION AS EMP_EXTENSION
FROM EMP.EMPLOYEES_CONTACTS
WHERE EMP_EMAIL = EMPLOYEE_EMAIL
;
OPEN EMP_RECORD_SET4 FOR
SELECT EMPLOYEEJOB AS EMP_JOB,
EMPLOYEERESPONSIBILITIES AS EMP_RESPONSIBILITIES
FROM EMP.EMPLOYEES_DATA
WHERE EMP_EMAIL = EMPLOYEE_EMAIL
;
END GET_PROTOCOL_INFO_SP;
我需要知道我的语法是否正确以及是否应关闭游标。我有4个不同的表格,在应用程序中调用数据。
欢迎使用StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)格式和语法突出显示它! – 2012-07-20 13:54:07
您在客户端应用程序中如何处理这些结果?你真的提出4个完全独立的结果表吗?或者您是否呈现了员工不同属性的单一视图? EMP_EMAIL是这些表中的一个关键吗?或者是否真的有可能在所有4个表中有相同的'EMPLOYEE_EMAIL'多行?如果有多名员工使用同一封电子邮件,您如何确定客户端的哪个地址/电话等数据与哪位员工有关? – 2012-07-20 16:25:03
谢谢marc_s。 @justin洞穴 - 我需要知道我的语法是否正确,以及我是否应该关闭游标。是的,我有4个不同的表,其中数据在应用程序中调用 – 2012-07-20 18:14:34