Skip to Main Content

SQL & PL/SQL

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

Strange ORA-01403: no data found in PL/SQL

4256175Sep 1 2020 — edited Sep 2 2020

Old code I'm trying to fix up - can someone assist?  It gives me a strange ORA-01403: no data found in PL/SQL

Details:

------------------------------------------------------------------

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0

PL/SQL Release 12.1.0.2.0 - Production 0

"CORE 12.1.0.2.0 Production" 0

TNS for Linux: Version 12.1.0.2.0 - Production 0

NLSRTL Version 12.1.0.2.0 - Production 0

------------------------------------------------------------------

set linesize 600

set serveroutput on

SET FEEDBACK OFF

SET TERMOUT OFF

SET TRIMSPOOL ON

SET TRIMOUT ON

SET verify OFF

SET echo OFF

SPOOL "C:\stuff\test.123.sql";

DECLARE

    

   CURSOR c_instance

   IS

        SELECT   instance_number, instance_name

          FROM   gv$instance

      ORDER BY   1;

   v_dbid           v$database.dbid%TYPE;

   v_dbname         v$database.name%TYPE;

   v_inst_num       v$instance.instance_number%TYPE := 1;

   loop_num         NUMBER;

   v_max            NUMBER;

   v_begin          NUMBER;

   v_end            NUMBER;

   v_start_date     VARCHAR2 (20);

   v_end_date       VARCHAR2 (20);

   v_options        NUMBER := 8;        -- 0=no options, 8=enable addm feature

   v_file           UTL_FILE.file_type;

   v_file_name      VARCHAR (50);

PROCEDURE printSQL ( vpath varchar2,

  vinstanceName varchar2,

  vbegin varchar2,

  vend varchar2,

  vstart_date varchar2,

  vend_date varchar2,

  vdbid varchar2,

  vinstance_number varchar2,

  voptions varchar2

  ) IS

BEGIN

DBMS_OUTPUT.PUT_LINE ('

SPOOL ' ||  vpath  || vinstanceName || '_' || vbegin || '_' || vend || '_' || vstart_date || '_' || vend_date || '_RMETRICS.html ' || CHR (10) || '

BEGIN' || CHR (10) || '

FOR c_report' || CHR (10) || '

IN (' || CHR (10) || '

SELECT   output' || CHR (10) || '

FROM   TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html (' || CHR (10) || '

' || vdbid ||',' || CHR (10) || '

' || vinstance_number ||',' || CHR (10) || '

' || vbegin ||',' || CHR (10) || '

' || vend ||',' || CHR (10) || '

' || voptions ||' ' || CHR (10) || '

))' || CHR (10) || '

)' || CHR (10) || '

LOOP' || CHR (10) || '

DBMS_OUTPUT.PUT_LINE (c_report.output);' || CHR (10) || '

END LOOP;' || CHR (10) || 'END;'

|| CHR (10)

|| CHR (10) || '/'

);

END printSQL;

BEGIN

   -- get database id

   SELECT   dbid, name

     INTO   v_dbid, v_dbname

     FROM   v$database;

   -- get end snapshot id

   SELECT   MAX (snap_id)

     INTO   v_max

     FROM   dba_hist_snapshot

     WHERE  TO_CHAR (END_INTERVAL_TIME, 'yyyy/mm/dd hh24') <= to_char(sysdate,'yyyy/mm/dd hh24');

   

DBMS_OUTPUT.PUT_LINE ('

set linesize 550' || CHR (10) || '

set serveroutput on' || CHR (10) || '

SET FEEDBACK OFF' || CHR (10) || '

SET TERMOUT OFF' || CHR (10) || '

SET TRIMSPOOL ON' || CHR (10) || '

SET TRIMOUT ON' || CHR (10) || '

SET verify OFF' || CHR (10) || '

SET echo OFF' || CHR (10)

);

-- let's go to real work...write awrs to files...

   FOR v_instance IN c_instance

   LOOP

      --dbms_output.put_line(chr(10));

  --DBMS_OUTPUT.put_line ('v_instance.instance_name:' || v_instance.instance_name);

      -- begin 1 hour x 24 --

  --dbms_output.put_line(chr(10));

  --DBMS_OUTPUT.PUT_LINE ('================================ begin 1 hour x 24 ================================');

      --FOR loop_num IN  0..23 LOOP

  FOR loop_num IN  0..23 LOOP

            v_end := v_max - loop_num;

            v_begin := v_max - loop_num - 1;

            SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

              INTO   v_start_date

              FROM   dba_hist_snapshot

             WHERE   snap_id = v_begin AND instance_number = v_inst_num;

            SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

              INTO   v_end_date

              FROM   dba_hist_snapshot

             WHERE   snap_id = v_end AND instance_number = v_inst_num;

printSQL ('C:\stuff\',

  v_instance.instance_name,

  v_begin,

  v_end,

  v_start_date,

  v_end_date,

  v_dbid,

  v_instance.instance_number,

  v_options

  );

     END LOOP;

     -- end 1 hour x 24 --

--begin 12 hours--

      v_end := v_max;

      v_begin := v_max - 12;

SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_start_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_begin AND instance_number = v_inst_num;

      SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_end_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_end AND instance_number = v_inst_num;

printSQL ('C:\stuff\',

  v_instance.instance_name,

  v_begin,

  v_end,

  v_start_date,

  v_end_date,

  v_dbid,

  v_instance.instance_number,

  v_options

  );

-- end 12 hours --

--begin 12 hours 02--

      v_end := v_max - 12;

      v_begin := v_max - 24;

      SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_start_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_begin AND instance_number = v_inst_num;

      SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_end_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_end AND instance_number = v_inst_num;

printSQL ('C:\stuff\',

  v_instance.instance_name,

  v_begin,

  v_end,

  v_start_date,

  v_end_date,

  v_dbid,

  v_instance.instance_number,

  v_options

  );

-- end 12 hours --

-- begin 24  hours ---

      v_end := v_max;

      v_begin := v_max - 24;

      SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_start_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_begin AND instance_number = v_inst_num;

      SELECT   TO_CHAR (END_INTERVAL_TIME, 'HH24MI')

        INTO   v_end_date

        FROM   dba_hist_snapshot

       WHERE   snap_id = v_end AND instance_number = v_inst_num;

printSQL ('C:\stuff\',

  v_instance.instance_name,

  v_begin,

  v_end,

  v_start_date,

  v_end_date,

  v_dbid,

  v_instance.instance_number,

  v_options

  );

-- end 24 hours ---

     END LOOP;

DBMS_OUTPUT.PUT_LINE ('

EXIT;' );

 

end;

/

EXIT;

Comments
Post Details
Added on Sep 1 2020
9 comments
1,349 views