【问题标题】:PL/SQL Read Row Data From table from using FunctionsPL/SQL 使用函数从表中读取行数据
【发布时间】:2021-09-27 14:20:11
【问题描述】:

嗨,我是 pl/sql 的新手,我在让我的函数从我的表中返回数据时遇到问题在解决我的问题时无法理解它们

我创建的函数接受一个 ID 参数,用于返回与该参数匹配的学生姓名。

CREATE OR REPLACE function getName(ID in INTEGER)
    RETURN varchar2
    IS id_name varchar2(25);
    BEGIN
    SELECT NAME INTO id_name from student
    where ID = getName.ID;
    RETURN (id_name);
    END;

该函数编译没有任何问题,但是当我尝试使用 ID 值运行该函数时,我知道学生表是这样的:

BEGIN
getName(2020001);
END;

我收到一条 pls-00103 错误消息,我不知道该怎么做才能让函数从我创建的学生表中读取数据,任何帮助都将不胜感激

【问题讨论】:

  • 你是在 sqlplus 中运行这个吗?在函数末尾添加 /

标签: sql function plsql oracle-sqldeveloper


【解决方案1】:

如果要在 PL/SQL 中调用函数,通常需要声明一个变量来存储返回值。即使只使用dbms_output (可能)将其写入控制台,您也可能想要对结果做一些事情

declare
  l_name student.name%type;
begin
  l_name := getName(2020001);
  dbms_output.put_line( 'The name is : ' || l_name );
end;
/

或者您可以在 SQL 语句中使用该函数

select getName(2020001)
  from dual

【讨论】:

  • 感谢@Justin Cave,但第一个代码有效,但仍无法获取数据第二个拒绝编译并导致 pls-00428 错误,因为必须始终将工作 pl/sql 语句分配给变量尝试替代``` select getName(2020001) into l_name from dual ``` 程序编译成功但不返回任何数据
  • @Alpheus - “不获取数据”具体是什么意思?您没有看到任何写入控制台的内容吗?您是否告诉客户端从dbms_output 缓冲区读取数据?例如SQL*Plus 中的set serveroutput on。至于第二个,那是一条 SQL 语句,因此它会以交互方式运行。不作为程序的一部分。但是我不确定在过程的上下文中“不返回任何数据”是什么意思——过程不返回数据。他们可以有out 参数,允许他们向调用者提供一些信息,但这并不明显是你在做什么。
  • 是的,我认为我不需要设置服务器输出,而使用 oracle sql 开发人员能够弄清楚,抱歉回复晚了,
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多