【问题标题】:Function in ORACLEORACLE 中的函数
【发布时间】:2020-06-10 10:32:58
【问题描述】:

所以我试图创建一个函数

Edit: Deleted this and created a new code

我收到一个错误警告:函数创建时出现编译错误。 所以指导会很有帮助。如果您能告知如何执行它,我会很有帮助

编辑:创建了一个新代码以返回相同的错误

CREATE OR REPLACE FUNCTION EmpNoFunc(p_empno IN Employee01.EmpNo%TYPE)
RETURN VARCHAR2
IS Emp_Detail VARCHAR2(130);
BEGIN
SELECT 'E_Name-'|| Employee01.EName ||,
'Job-'|| Employee01.Job ||, 'Hired-'|| Employee01.HiredDate ||,
INTO Emp_Detail
FROM Employee01
WHERE EmpNo = p_empno;
RETURN(Emp_Detail);
END EmpNoFunc;
/

错误是 -

5/1      PL/SQL: SQL Statement ignored
5/39     PL/SQL: ORA-00936: missing expression

但似乎无法解决。

【问题讨论】:

  • 您需要将该 SELECT 的结果存储在某处。而且您的函数中缺少 RETURN 语句。
  • 我该怎么办RETURN
  • 这取决于你想要什么。你为什么要创建一个函数?它的目的是返回something。如果您不想这样做(返回 something),您可能根本不需要函数。请考虑使用存储过程。
  • @LittleFoot 你能检查一下编辑后的新代码吗
  • 您将 3 列选择为 1 个变量。尝试对它应该如何工作有基本的了解。最好的起点是文档:google“oracle SELECT INTO”或docs.oracle.com/cd/B19306_01/appdev.102/b14261/…

标签: sql oracle oracle10g sql-function


【解决方案1】:

你很接近;与您的表类似的工作示例(Scott 的 EMP):

SQL> CREATE OR REPLACE FUNCTION empnofunc (p_empno IN emp.empno%TYPE)
  2     RETURN VARCHAR2
  3  IS
  4     emp_detail  VARCHAR2 (130);
  5  BEGIN
  6     SELECT    'EName-'
  7            || e.ename
  8            || ', Job-'
  9            || e.job
 10            || ', Hired-'
 11            || e.hiredate
 12       INTO emp_detail
 13       FROM emp e
 14      WHERE e.empno = p_empno;
 15
 16     RETURN (emp_detail);
 17  END empnofunc;
 18  /

Function created.

SQL> SELECT empnofunc (empno) result
  2    FROM emp
  3   WHERE empno = 7369;

RESULT
-----------------------------------------------------------------------------
EName-SMITH, Job-CLERK, Hired-17.12.80

SQL>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 2012-09-13
    相关资源
    最近更新 更多