【问题标题】:How to write a PL/SQL procedure with x input parameters and input/ouput of x parameters combined如何使用 x 输入参数和 x 参数的输入/输出组合编写 PL/SQL 过程
【发布时间】:2021-07-26 01:12:30
【问题描述】:

我必须创建一个程序,自动创建一个 STUDENT_ID,输入参数为 Name、Surname、Gender、Date_Birth、State.

示例:

  • 姓名:约翰
  • 姓:史密斯
  • 性别:M
  • 出生日期:17/05/1996
  • 州:加利福尼亚

输出:

STUDENT_ID is : JHN-STH-M-17596-CLFN

我在问题中添加了“-”以使其更好看,但在输出中它应该是 JHNSTHM17596CLFN

我已经制作了 5 个单独的程序来计算姓名,姓氏 ecc.. 我想编写一个程序,使用我制作的程序(按顺序)计算 STUDENT_ID,并且还有一个“输入”参数和输入/输出“学生”这将“打印”STUDENT_ID

procedure  student_id     (surname in varchar2,
                           name in varchar2,
                           gender in varchar2,
                           date_birth in varchar2,
                           state in varchar2) is
begin

....


dbms_output.put_line ('Student_ID is :');

这段代码“应该”是输入参数,不知道写对了没有

【问题讨论】:

  • 我不明白预期的输出。 H从哪里来?此外,要将“California”转换为“CLFN”(这是一个州),您必须创建一个查找表,或者为每个州创建一个 CASE 表达式。
  • @OldProgrammer H 来自 joHn(名字,我已经做了一个程序来计算名字,它只会提取我的前 3 个辅音),“CLFN”就是一个例子(一个坏的)在输入和预期输出中,我有一个程序和一个可以从中获取参考的城市表。我想要的只是一个示例,说明我应该如何编写计算 student_id 的程序,包括我为计算 name,surname ecc 所做的所有其他程序。

标签: oracle plsql plsqldeveloper plsql-package


【解决方案1】:

在我看来,好像

  • 您应该将计算STUDENT_ID 每一部分的过程“转换”为函数
    • 为什么?因为 - 就像现在一样 - 过程必须有一个 OUT 参数,以便它们可以返回他们计算的内容。这不过是一个函数
  • 将信息片段传递给每个人
  • 得到结果
  • 连接结果片段为最终的STUDENT_ID

类似这样的:

function f_name (par_name in varchar2) return varchar2 is
  retval varchar2(20);
begin
  retval := whatever code you have to find it
  return retval;
end;

function f_surname (par_surname in varchar2) return varchar2 is
  retval varchar2(20);
begin
  retval := whatever code you have to find it
  return retval;
end;

etc.

procedure student_id (par_surname in varchar2, par_name in varchar2, ...)
is
  l_student_id varchar2(30);
begin
  l_student_id := f_name   (par_name)    ||'-'||
                  f_surname(par_surname) ||'-'||
                  f_gender (par_gender)  ||'-'||
                  ...
                  f_state  (par_state);
                  
  dbms_output.put_line('Student_ID is: ' || l_student_id);
end;  

最后,由于所有这些函数和过程都处理相同的问题,最好将它们全部放入一个中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多