7. April 2010

SQL*Plus Miniskript zum schnellen Finden von DB-Objekten

English title: Miniscript for looking up object names

Bereits vor einiger Zeit war hier mal ein Blog-Posting mit Kommando-Abkürzungen für SQL*Plus (Miniskripts mit SQL*Plus). Damit kann man häufig benötigte Kommandos einfach durch kürzere Skriptnamen ersetzen. Das Posting enthält auch ein paar Beispiele, die ich selbst recht häufig nutze.
Some time ago I had a blog posting about "command shortcuts" for SQL*Plus (Path variable for SQL script: SQLPATH). Frequently used SQL statements can then be replaced with shorter script names. The posting also contains some example which I actually use quite often.
Heute habe ich ein Neues: Ich selbst suche in SQL*Plus recht oft bestimmte Objekte (Prozedurnamen oder Views). Und dann geht man halt hin und sucht in der ALL_OBJECTS-View - ist ja auch kein Problem. Aber einige Tipperei. Eine Lösung könnte das hier sein ...
Here is a new one: I'm frequently looking for spcific objects in SQL*Plus. Most often I then use the ALL_OBJECTS view to lookup the exact object name (which I need for describe or using it). This is not rocket science - but a lot of typing. This one might help ...
col object_name format a30
col object_type format a20
col owner       format a15
set pages 30
set verify off
set lines 120


select owner, object_name, object_type
from all_objects 
where 
(upper(owner) like '%'||substr(upper('&1'), 1, instr(upper('&1'), ',', 1) - 1)||'%') and
(upper(object_type) like '%'||substr(upper('&1'), instr(upper('&1'),',', 1) + 1, instr(upper('&1'),',', -1) - (instr(upper('&1'),',', 1) + 1))||'%') and
(upper(object_name) like '%'||substr(upper('&1'), instr(upper('&1'), ',', instr(upper('&1'), ',', 1)+1 ) + 1)||'%') and
rownum <50
/

undefine 1
Speichert die Datei in dem Verzeichnis ab, auf das die Umgebungsvariable SQLPATH zeigt. Gebt der Datei einen kurzen Namen, bspw. "lo" für "list objects". Dann könnt Ihr Sie wie folgt nutzen:
Save the file in the directory which the environment variable SQLPATH points to and give a short name - say "lo" for "list objects". Then use it as follows:
SQL> @lo {owner,object-type,object-name}

SQL> @lo ,vie,APEX_APP%REG

OWNER           OBJECT_NAME                    OBJECT_TYPE
--------------- ------------------------------ --------------------
APEX_030200     APEX_APPLICATION_PAGE_REGIONS  VIEW
APEX_030200     APEX_APPLICATION_TEMP_REGION   VIEW
Nach dem Skriptnamen kommt ein Parameter, in dem Ihr durch Komma getrennt eine Angabe zum Owner, zum Typen und zum Namen machen könnt. Ihr könnt Angaben weglassen, die zwei Kommas müssen aber auf jeden Fall da sein. Das Skript rahmt jede Angabe mit Prozentzeichen (%) ein und macht eine LIKE-Suche.
The script name is followed by one argument which contains search criteria for owner, object type and object name. You can omit criteria but the two commas must be present in all cases. The script wraps the criteria with percent signs (%) and performs a LIKE search.
1. Zeige mir die Views, die was mit NLS zu tun haben
1. Show me the views containing NLS information
SQL> @lo ,vie,nls

OWNER           OBJECT_NAME                    OBJECT_TYPE
--------------- ------------------------------ --------------------
SYS             V_$NLS_PARAMETERS              VIEW
SYS             V_$NLS_VALID_VALUES            VIEW
SYS             GV_$NLS_PARAMETERS             VIEW
SYS             GV_$NLS_VALID_VALUES           VIEW
SYS             NLS_SESSION_PARAMETERS         VIEW
SYS             NLS_INSTANCE_PARAMETERS        VIEW
SYS             NLS_DATABASE_PARAMETERS        VIEW
SYS             EXU9NLS                        VIEW
2. Standalone-Prozeduren im APEX..-Schema
2. Which standalone procedures are available in the APEX...-Schema
SQL> @lo apex,pro,

OWNER           OBJECT_NAME                    OBJECT_TYPE
--------------- ------------------------------ --------------------
APEX_030200     WWV_FLOW_INIT_HTP_BUFFER       PROCEDURE
APEX_030200     F                              PROCEDURE
APEX_030200     APEX                           PROCEDURE
APEX_030200     DEVELOPMENT_SERVICE_HOME       PROCEDURE
APEX_030200     HTMLDB                         PROCEDURE
APEX_030200     HTMLDB_LOGIN                   PROCEDURE
APEX_030200     DEVELOPMENT_SERVICE_HOME_LOGIN PROCEDURE
APEX_030200     DEVELOPMENT_SERVICE_SIGNUP     PROCEDURE
APEX_030200     Z                              PROCEDURE
APEX_030200     G                              PROCEDURE
APEX_030200     P                              PROCEDURE
APEX_030200     APEX_ADMIN                     PROCEDURE
APEX_030200     HTMLDB_ADMIN                   PROCEDURE
3. Wie war doch der Name der View mit den Details zur Ausführung eines Scheduler-Jobs?
3. What was the name of the view containing the details about a scheduler job run?
SQL> @lo ,v,scheduler%job%det

OWNER           OBJECT_NAME                    OBJECT_TYPE
--------------- ------------------------------ --------------------
SYS             DBA_SCHEDULER_JOB_RUN_DETAILS  VIEW
SYS             USER_SCHEDULER_JOB_RUN_DETAILS VIEW
SYS             ALL_SCHEDULER_JOB_RUN_DETAILS  VIEW
Viel Spaß damit. Wenn Ihr auch mit SQL*Plus arbeitet und solche "Miniskripts" habt - ich bin stets interessiert!
Have fun! If you're also working with SQL*Plus and you have such "miniscripts" - I'm always interested ...

1 Kommentar:

Martin Preiss hat gesagt…

Hallo Carsten,
SQLPATH-Scripts gehören auch zu meinen Hobbies, aber die meisten meiner Scripts basieren auf Vorlagen, die ich im Lauf der Zeit hier und dort ausgeborgt habe, unter anderem bei Tim Hall (http://www.oracle-base.com/dba/DBACategories.php), Jonathan Lewis (http://jonathanlewis.wordpress.com/2009/12/18/simple-scripts/) und Tom Kyte (http://tkyte.blogspot.com/2009/10/httpasktomoraclecomtkyte.html). Bei Tanel Poder (http://tech.e2sn.com/oracle-scripts-and-tools/session-snapper) wird ein solches Script dann fast zur Kunstform.

Freundliche Grüße

Martin Preiß

Beliebte Postings