1.有如下代码, 看的不是很明白,请教下:代码如下: 
SET TERM ON ECHO OFF;
PRO
PRO Parameter 1:
PRO Oracle Pack License (Tuning, Diagnostics or None) [T|D|N] (required)
PRO
DEF input_license = '^1';
PRO
SET TERM OFF;
COL license NEW_V license FOR A1;SELECT UPPER(SUBSTR(TRIM('^^input_license.'), 1, 1)) license FROM DUAL;VAR license CHAR(1);
EXEC :license := '^^license.';COL unique_id NEW_V unique_id FOR A15;
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') unique_id FROM DUAL;SET TERM ON;
WHENEVER SQLERROR EXIT SQL.SQLCODE;BEGIN
  IF '^^license.' IS NULL OR '^^license.' NOT IN ('T', 'D', 'N') THEN
    RAISE_APPLICATION_ERROR(-20100, 'Oracle Pack License (Tuning, Diagnostics or None) must be specified as "T" or "D" or "N".');
  END IF;
END;
/WHENEVER SQLERROR CONTINUE;PRO
PRO Parameter 2:
PRO SQL_ID of the SQL to be analyzed (required)
PRO
DEF input_sql_id = '^2';
DEF input_parameter = '^^input_sql_id.';
PROPRO Values passed:
PRO ~~~~~~~~~~~~~
PRO License: "^^input_license."
PRO SQL_ID : "^^input_sql_id."
PRO
--SET TERM OFF;-- get dbid
COL dbid NEW_V dbid;
SELECT dbid FROM v$database;COL sql_id NEW_V sql_id FOR A13;SELECT sql_id
  FROM gv$sqlarea
 WHERE sql_id = TRIM('^^input_sql_id.')
 UNION
SELECT sql_id
  FROM dba_hist_sqltext
 WHERE :license IN ('T', 'D')
   AND dbid = ^^dbid.
   AND sql_id = TRIM('^^input_sql_id.');VAR sql_id VARCHAR2(13);
EXEC :sql_id := '^^sql_id.';SET TERM ON;
WHENEVER SQLERROR EXIT SQL.SQLCODE;BEGIN
  IF '^^sql_id.' IS NULL THEN
    IF :license IN ('T', 'D') THEN
      RAISE_APPLICATION_ERROR(-20200, 'SQL_ID "^^input_sql_id." not found in memory nor in AWR.');
    ELSE
      RAISE_APPLICATION_ERROR(-20200, 'SQL_ID "^^input_sql_id." not found in memory.');
    END IF;
  END IF;
END;
/WHENEVER SQLERROR CONTINUE;
SET ECHO ON TIMI ON;
问题如下:
问题1:
DEF input_license = '^1';^1是代表什么意思,这个一个值,还是提示输出。
问题2:
COL license NEW_V license FOR A1;
SELECT UPPER(SUBSTR(TRIM('^^input_license.'), 1, 1)) license FROM DUAL;'^^input_license.' 是什么意思,为何要2个^?
谢谢大家。

解决方案 »

  1.   

    DEF input_license = '^1';就是定义了 一个变量,变量名是 input_license , 同时给他赋了一个值是   '^1';
      

  2.   

    1、DEF input_license = '^1'; 一个赋值语句,把 '^1' 这个值赋给input_license 这个变量
    2、SELECT UPPER(SUBSTR(TRIM('^^input_license.'), 1, 1)) license FROM DUAL;
         '^^input_license.'  这是一个常量值,和123,abc,一样,就是一个常量。
    如果想引用input_license这个变量,也应该是 SELECT UPPER(SUBSTR(TRIM('&input_license'), 1, 2)) license FROM DUAL;
      

  3.   

    另外这段sql 开头有如下语句:SET DEF ^ TERM OFF ECHO ON VER OFF SERVEROUT ON SIZE 1000000;我想问下:如下语句SET DEF ^ TERM OFF是做什么用的?