CREATE PROCEDURE getcustomerdetails (
d_Fname OUT VARCHAR2,
d_Lname OUT VARCHAR2,
d_date_signed OUT DATE,
d_id IN VARCHAR2)
IS
BEGIN
SELECT Fname,
Lname,
date_signed
INTO d_Fname,
d_Lname,
d_date_signed
FROM customer
WHERE id = d_id;
END getcustomerdetails;
/
DECLARE
l_id customer.id%TYPE := '-90';
l_fname customer.fname%TYPE;
l_lname customer.lname%TYPE;
l_date_signed customer.date_signed%TYPE;
BEGIN
getcustomerdetails (l_fname,
l_lname,
l_date_signed,
l_id);
DBMS_OUTPUT.put_line (
'First name '
|| l_fname || chr (40)
|| 'Last name '
|| l_lname || chr (30)
|| 'Date Signed '
|| l_date_signed);
END;
/
PROCEDURE getcustomerdetails
BEGIN
SELECT id, fname, lname, shop, Date_signed, average_spend,
FROM Customers
END;
请指教
答案 0 :(得分:0)
DBMS_OUTPUT.PUT_LINE
调用表明这是 Oracle,毕竟。如果是这样,您的代码看起来基本没问题:
PROCEDURE getcustomerdetails
根本不应该存在;它的目的是什么?您已经创建了程序,不是吗?CHR
函数。我会说在这种情况下不合适set serveroutput on
,或者在您可能使用的任何其他 GUI 中推送“启用输出”或类似功能。立>
所以:示例表:
SQL> CREATE TABLE customer
2 AS
3 SELECT 'Little' fname,
4 'Foot' lname,
5 TRUNC (SYSDATE) date_signed,
6 -90 id
7 FROM DUAL;
Table created.
程序:
SQL> CREATE OR REPLACE PROCEDURE getcustomerdetails (
2 d_Fname OUT VARCHAR2,
3 d_Lname OUT VARCHAR2,
4 d_date_signed OUT DATE,
5 d_id IN VARCHAR2)
6 IS
7 BEGIN
8 SELECT Fname, Lname, date_signed
9 INTO d_Fname, d_Lname, d_date_signed
10 FROM customer
11 WHERE id = d_id;
12 END getcustomerdetails;
13 /
Procedure created.
测试:
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
2 l_id customer.id%TYPE := '-90';
3 l_fname customer.fname%TYPE;
4 l_lname customer.lname%TYPE;
5 l_date_signed customer.date_signed%TYPE;
6 BEGIN
7 getcustomerdetails (l_fname,
8 l_lname,
9 l_date_signed,
10 l_id);
11
12
13 DBMS_OUTPUT.put_line (
14 'First name '
15 || l_fname
16 || CHR (40)
17 || 'Last name '
18 || l_lname
19 || CHR (30)
20 || 'Date Signed '
21 || l_date_signed);
22 END;
23 /
First name Little(Last name Foot▲Date Signed 26.03.2021
PL/SQL procedure successfully completed.
SQL>