简体   繁体   English

将输出添加到功能PL / SQL

[英]Adding output to function PL/SQL

I am trying to get my function to include the date and current user, but I keep getting an error that my function is in an invalid state. 我试图让我的函数包含日期和当前用户,但是我不断收到错误消息,表明我的函数处于无效状态。 If I comment out or remove the two dbms_output... lines it works just fine. 如果我注释掉或删除了两个dbms_output ...行,它就可以正常工作。 Any ideas of how to return that output? 关于如何返回该输出的任何想法? Using Oracle SQL Developer 使用Oracle SQL Developer

CREATE OR REPLACE FUNCTION f_concatenate_strings(x VARCHAR2, y VARCHAR2) 
RETURN VARCHAR2
AS
   str1 VARCHAR2(10) := x;
   str2 VARCHAR2(10) := y;
BEGIN
   RETURN str1 || str2;
   dbms_output.put_line('The result is ' || result);
   dbms_output.put_line('Date: ' || SYSDATE || ' user: ' || 
   SYS_CONTEXT('USERENV','OS_USER'));
END;
/
SELECT f_concatenate_strings('Crypto','Currency') FROM DUAL;

You have to declare the result Variable first, also enable the dbms_output on your SQL Developer. 您必须首先声明结果Variable,还必须在SQL Developer上启用dbms_output。

This should work. 这应该工作。

CREATE OR REPLACE FUNCTION f_concatenate_strings(x VARCHAR2, y VARCHAR2) 
RETURN VARCHAR2
AS
   str1 VARCHAR2(10) := x;
   STR2 VARCHAR2(10) := Y;
   result VARCHAR2(250);
BEGIN
   result := str1 || str2;
   dbms_output.put_line('The result is ' || result);
   dbms_output.put_line('Date: ' || SYSDATE || ' user: ' || 
   SYS_CONTEXT('USERENV','OS_USER'));
RETURN result; 
END;
/
SELECT F_CONCATENATE_STRINGS('Crypto','Currency') FROM DUAL;

your function has some issues. 您的功能有一些问题。

  • result is not declared result未声明
  • return statement should be the last statement in the function. return语句应该是函数中的最后一条语句。 it return a result and terminates the execution of the function 它返回结果并终止该函数的执行
  • you should convert to char the sysdate 您应该将sysdate转换为char

you can try this one: 您可以尝试以下一种方法:

CREATE OR REPLACE FUNCTION f_concatenate_strings(x VARCHAR2, y VARCHAR2) 
RETURN VARCHAR2
AS
   --str1 VARCHAR2(10) := x;
   --str2 VARCHAR2(10) := y;
  result VARCHAR2(20);
BEGIN
   result := x || y;

   dbms_output.put_line('The result is ' || result);
   dbms_output.put_line('Date: ' || to_char(SYSDATE,'dd.mm.yyyy') || ' user: ' || 
   SYS_CONTEXT('USERENV','OS_USER'));

   RETURN result; -- move to the end of the function
END;
/
SELECT f_concatenate_strings('Crypto','Currency') FROM DUAL;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM