Как получить выходную переменную, заключенную в одинарные кавычки - PullRequest
0 голосов
/ 09 апреля 2020

Объявленная переменная startime при возвращении вывода хочет, чтобы он был заключен в одинарные кавычки, чтобы я мог передать вывод как переменную вызываемой процедуре. Например, '08 -APR-2020 08:00:00 ', поскольку процедура интерпретирует его как нулевое значение, если оно не заключено в одинарные кавычки. Вот почему я хочу объединить вывод с одинарными кавычками. Это конкретная проблема c, в то время как вызов процедуры rman rds. Обострена проблема, когда AWS находится в стадии расследования и ожидает ответа.

DECLARE
    starttime DATE := sysdate - (15/1440) ;
    endtime DATE := SYSDATE ;
    v_date DATE;
    v_number NUMBER(10);
BEGIN
    -- Print the starttime and endtime
    DBMS_OUTPUT.PUT_LINE(starttime);
    DBMS_OUTPUT.PUT_LINE(endtime);
END;
/

09-APR-2020 13:10:14
09-APR-2020 13:25:14

PL/SQL procedure successfully completed

Приведенная ниже процедура дает мне ORA-01858: не числовой символ c был найден, когда число c ожидалось. Если я заменяю v_starttime, endtime DATE := ' 08-APR-2020 04:00:00' со значениями даты, все работает нормально, и я получаю вывод. Это база данных Oracle rds.

CREATE OR REPLACE PROCEDURE test (
    owner    VARCHAR2,
    dir      VARCHAR2,
    starttm  DATE,
    endtm    DATE,
    parallel NUMBER,
    output   BOOLEAN )
    AUTHID DEFINER AS
BEGIN
    rdsadmin.rdsadmin_rman_util.backup_archivelog_date(
    p_owner               => owner,
    p_directory_name      => dir,
    p_from_date           => startm,
    p_to_date             => endtm,
    p_parallel            => parallel,
    p_rman_to_dbms_output => TRUE);
END;
/

DECLARE
    plsql_block  VARCHAR2(500);
    owner        VARCHAR2(4)  := 'TEST';
    dir          VARCHAR2(10) := 'TESTDIR';
    startm       DATE         := SYSDATE - (15/1440);
    endtm        DATE         := SYSDATE;
    parallel     NUMBER       := 1;
    output       BOOLEAN;
BEGIN
    plsql_block := 'BEGIN test(:a,:b,:c,:d,:e,:f);END;';
    EXECUTE IMMEDIATE plsql_block USING owner,dir,startm,endtm, parallel, output;          
END;
/

1 Ответ

0 голосов
/ 09 апреля 2020

Если вы хотите заключить выходные данные в одну кавычку, вы можете попытаться объединить их, используя символы ASCI, например:

DECLARE
  starttime DATE := sysdate - (15/1440) ;
  endtime DATE := SYSDATE ;
  v_date DATE;
  v_number NUMBER(10);
BEGIN
  -- Print the starttime and endtime
  DBMS_OUTPUT.PUT_LINE(CHR(39) || TO_CHAR(starttime) || CHR(39));
  DBMS_OUTPUT.PUT_LINE(CHR(39) || TO_CHAR(endtime) || CHR(39));
END;
...