尝试使用过程输出记录,MySQL PL/SQL

时间:2021-03-26 03:01:45

标签: mysql oracle

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;

请指教

1 个答案:

答案 0 :(得分:0)

DBMS_OUTPUT.PUT_LINE 调用表明这是 Oracle,毕竟。如果是这样,您的代码看起来基本没问题:

  • 最后一个 PROCEDURE getcustomerdetails 根本不应该存在;它的目的是什么?您已经创建了程序,不是吗?
  • 输出有点奇怪。如果您打算使用方括号,您应该直接连接它们,而不使用 CHR 函数。我会说在这种情况下不合适
  • 您发布的代码表明您“忘记”启用输出,即 SQL*Plus 或 SQL Developer 中的 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>