Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL向字符串添加更多字符_Oracle_Plsql - Fatal编程技术网

Oracle PL/SQL向字符串添加更多字符

Oracle PL/SQL向字符串添加更多字符,oracle,plsql,Oracle,Plsql,我希望能够在程序结束时创建一个小报告,并通过电子邮件发送给我自己 所以我有一个函数,它以字符串的形式返回它所做的事情: create or replace function TEST_DELETE_ME RETURN VARCHAR2 IS COUNTS INT; begin SELECT COUNT(*) INTO COUNTS FROM MV; IF COUNTS = 0 THEN RETURN 'MV is empty'; ELSE RETURN

我希望能够在程序结束时创建一个小报告,并通过电子邮件发送给我自己

所以我有一个函数,它以字符串的形式返回它所做的事情:

create or replace function  TEST_DELETE_ME RETURN VARCHAR2
IS
COUNTS INT;
begin

  SELECT COUNT(*) INTO COUNTS FROM MV;

  IF COUNTS = 0  THEN
      RETURN 'MV is empty';
  ELSE
      RETURN 'MV has been refreshed today';
  END IF;
end;
/
然后我有一个过程调用这个函数并将返回的结果存储到varchar2变量中:

create or replace 
PROCEDURE TEST2_DELETEME
authid current_user
IS
    report_stats  VARCHAR2(4000);  
    today varchar(30);
BEGIN
    select to_char(sysdate, 'Month DD, YYYY') into today  from dual;

    report_stats := 'Load Statistics for: ' || today || CHR(13) || CHR(10);
    report_stats := TEST_DELETE_ME;
    report_stats := 'End of Report!' || CHR(13) || CHR(10); 
    utl_mail.send( sender => 'refresh_mvs@orcl.com', 
    recipients => 'angelina12@gmail.com',
    subject => 'message from angelina',  message => report_stats);
END;
当我执行此命令时: 执行TEST2\u DELETEME

我收到的电子邮件中只包含函数返回的内容:

MV is empty
如何将所有这些字符串组合成
report\u stats
变量

如果你想知道什么是
CHR(13)| | CHR(10)是否

它添加了一个新行。

尝试:

report_stats := 'Load Statistics for: ' || today || CHR(13) || CHR(10) ||
      'End of Report!' || CHR(13) || CHR(10) || TEST_DELETE_ME;

您正在一次又一次地覆盖报表统计信息。要扩展它,请使用:


报告统计数据:=报告统计数据“随便什么”

:=是赋值运算符而不是concat运算符(as+=)…每次调用
report\u stats:=XX
时,都会覆盖现有值

试一试

输出:

"Load Statistics for: May 30, 2014
End of Report!
MV is empty"

我需要采用这种方法,因为在这个过程中,我将在许多不同的地方为这个字符串分配更多的字符。当我看到你的答案时,我意识到:)非常感谢!我知道我可以一直依靠你们。。。
create or replace 
PROCEDURE TEST2_DELETEME
authid current_user
IS
    report_stats  VARCHAR2(4000);  
    today varchar(30);
BEGIN
    select to_char(sysdate, 'Month DD, YYYY') into today  from dual;

    report_stats := report_stats || 'Load Statistics for: ' || today || CHR(13) || CHR(10);
    report_stats := report_stats || 'End of Report!' || CHR(13) || CHR(10); 
    report_stats := report_stats || TEST_DELETE_ME;
    utl_mail.send( sender => 'refresh_mvs@orcl.com', 
    recipients => 'angelina12@gmail.com',
    subject => 'message from angelina',  message => report_stats);
END;
"Load Statistics for: May 30, 2014
End of Report!
MV is empty"