PL/SQL 中的连接表

Posted

技术标签:

【中文标题】PL/SQL 中的连接表【英文标题】:Join table in PL/SQL 【发布时间】:2021-05-23 14:06:04 【问题描述】:

您好,我想问一下我在运行此代码时遇到错误,我能知道如何解决它吗?我想在输入患者 ID 时知道该患者的医生,谢谢。下面是我的代码

DECLARE
  patientid(3)  := &pt_id;
  dname     doc_name%type;
BEGIN
  SELECT doc_name
    INTO dname
    FROM doctor
    JOIN patient
      ON doctor.doc_id = patient.doc_id
   WHERE pt_id = patientid;

  DBMS_OUTPUT.PUT_LINE('He/She is the patient of Dr.' || dname);
END;

【问题讨论】:

我得到错误 什么是错误?请提供minimal reproducible example。此外,当您遵循所描述术语的最小部分时,您将轻松获得解决问题所需的所有信息 ORA-06550:第 3 行,第 10 列:PLS-00103:在预期以下情况之一时遇到符号“(”:常量异常 表列 long double ref char 时间时间戳间隔日期二进制国家字符 nchar 符号“”被替换为“(”以继续。 ORA-06550:第 9 行,第 18 列:PLS-00103:在预期以下情况之一时遇到符号“患者”:, ;对于有相交减去顺序开始联合的组,连接 06550。00000 - “行 %s,列 %s:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动: 请通过edit 发布您原始问题中的错误。您是否仔细阅读了第 3 行?错误确实在其中。 【参考方案1】:

patient(3) 应该是什么?缺少数据类型!

不过,考虑一下这样的事情:

SQL> set serveroutput on
SQL> declare
  2    -- No         : patientid(3):=&pt_id;
  3    -- Better     : patientid varchar2(3) := &pt_id;  -- is it VARCHAR2? or NUMBER? Who knows ...
  4    -- Even better:
  5    l_pt_id   patient.pt_id%type := &par_pt_id;
  6    l_dname   doctor.doc_name%type;
  7  begin
  8    select d.doc_name
  9      into l_dname
 10      from doctor d join patient p on d.doc_id = p.doc_id
 11     where p.pt_id = l_pt_id;
 12
 13    dbms_output.put_line ('He/She is the patient of Dr. '|| l_dname);
 14  end;
 15  /
Enter value for par_pt_id: 100
He/She is the patient of Dr. Luffy

PL/SQL procedure successfully completed.

SQL>

【讨论】:

我知道了,感谢您的帮助,所以我的数据类型丢失了。非常感谢你的队友

以上是关于PL/SQL 中的连接表的主要内容,如果未能解决你的问题,请参考以下文章

使用 pl/sql 中的 xmlelement 获取所有关系表数据

pl/sql连接oracle数据库tables里面不显示表。

PL/SQL - 如何从连接表中返回单行

用pl sql为oracle表创建sequence有啥用 怎么创建?

pl/sql 过程中的排序表失败

pl/SQL 过程从不同表中的值生成一个表中的值