2009-09-17 19 views
60

कई बार मुझे ओरेकल डीबी से त्वरित कनेक्शन की आवश्यकता होती है, जहां SQLPLUS नौकरी को संभालता है।पसंदीदा SQLPLUS युक्तियाँ और चाल

मुझे लगता है कि जब लोग ओरेकल का उपयोग शुरू करते हैं, तो पहली बात यह है कि उन्हें टोड या एसक्यूएल डेवलपर स्थापित करना है। फिर भी, यदि आप कुछ सरल प्रश्नों का पालन कर रहे हैं, तो कभी-कभी आप उन उपकरणों को लोड करने की प्रतीक्षा नहीं करना चाहते हैं।

SET pagesize 2000 
SET LONG 10000 
SET linesize 1000 
COLUMN last_name format a20 
COLUMN total format 999,999,999 
SET feedback ON 
alter session set nls_date_format = 'yyyy-mm-dd hh:mi:ssPM'; 

मैं इस उदाहरण के लिए मेरी "कॉलम" सेटिंग्स छंटनी की, लेकिन मूल रूप से, मदद करता है कि डेटा पर फिट:

मैं एक स्क्रिप्ट है कि मैं चलाने जब मैं अपने खोल शुरू तो मैं एक बेहतर अनुभव प्राप्त है स्क्रीन।

दिनांक प्रारूप सेट करना वास्तव में तिथियों से निपटने को सरल बनाता है।

जब विंडोज़ में कमांड विंडो खुलती है, तो मैंने विंडो लेआउट गुण सेट किए हैं, इसलिए मैं स्क्रॉल कर सकता हूं, एक विस्तृत विंडो इत्यादि कर सकता हूं और भविष्य की खिड़कियों के लिए सेटिंग्स को सहेज सकता हूं।

क्या कोई और दैनिक SQLPLUS का उपयोग करता है? कोई सुझाव?

+1

@ थिफमास्टर मैं सहमत हूं कि यह प्रश्न नियमित प्रश्न प्रारूप में फिट नहीं है। लेकिन इसने बहस नहीं उठाई। यह SQLPlus युक्तियों और चालों की एक बहुत उपयोगी और बहुत रचनात्मक सूची है। तो इसे बंद क्यों करें? –

+0

एक बेहतर कारण के साथ फिर से बंद :) यह बंद रहना चाहिए। लेकिन इसका मतलब यह नहीं है कि यह हटा दिया गया है! – ThiefMaster

+3

यह करीबी कारण बकवास भी है। हो सकता है कि कुछ राय उत्तर में शामिल हों लेकिन ये किसी विषय पर सभी उपयोगी टिप्स हैं जो खोजना मुश्किल है। मुझे समझ में नहीं आता कि हमें इन सवालों के साथ किस प्रकार से संरक्षित किया जा रहा है जो स्पष्ट रूप से बंद होने में सहायक हैं। मेरी इच्छा है कि 5+ अपवॉट्स के साथ प्रश्न –

उत्तर

17

हां, मैं टॉड या एसक्यूएल डेवलपर की प्राथमिकता में हर दिन एसक्यूएल प्लस का उपयोग करता हूं (हालांकि मैं डेटाबेस ब्राउज़ करने के लिए एसक्यूएल डेवलपर का भी उपयोग करता हूं)।

मैं है मेरी login.sql स्क्रिप्ट (जो एसक्यूएल प्लस स्वचालित रूप से चलाता है) में निम्नलिखित:

1) मेरी पसंद में से एक के साथ डिफ़ॉल्ट संपादक (नोटपैड) बदलें:

define _editor = "C:\Program Files\TextPad 5\TextPad.exe" 

2) बनाओ एसक्यूएल शीघ्र शो डेटाबेस नाम तो मैं जानता हूँ कि मैं कहाँ हूँ (इस के लिए टॉम Kyte करने के लिए धन्यवाद):

COLUMN global_name new_value gname 
SET TERMOUT OFF 
SELECT LOWER(USER) || '@' || global_name||CHR(10)||'SQL> ' AS global_name 
FROM global_name; 
SET SQLPROMPT '&gname' 
SET TERMOUT ON 

... और अन्य जो आपके जैसा की स्थापना।

मुझे टॉम Kyte की print_table प्रक्रिया भी बहुत उपयोगी लगता है।

+2

जोड़ने के लिए धन्यवाद, "कौन सा एसक्यूएल प्लस स्वचालित रूप से चलता है।" – Upperstage

+0

लिंक टूटा हुआ है! – atom

3

मुझे लगता है कि यह निर्देशों के भीतर एसक्यूएल * प्लस कॉलम वैरिएबल का उपयोग करने के लिए आसान है - उदाहरण के लिए, मैं अक्सर एक सत्र में हूं और एक अन्य फ़ाइल नाम को स्पूल करना चाहता हूं ताकि किसी अन्य लॉग को ओवरराइट करने से बच सकें जो पहले से मौजूद हो और ऐसा करे (एक @file के माध्यम से पहले तीन बयान):

SQL> column spr new_value spoolref 
SQL> select user||'_'||abs(dbms_random.random) spr from dual; 
SQL> spool &spoolref 
     ... do work here ... 
SQL> spool off 

मैं तो समय आधार पर क्रमित करके नया लॉग मिल जाएगा - आप हमेशा यादृच्छिक संख्या की तुलना में कुछ अन्य रणनीति इस्तेमाल कर सकते हैं यदि आप पसंद करते हैं।

10

याद रखें कि हम इन सेटिंग्स को login.sql स्क्रिप्ट में डाल सकते हैं जो एसक्यूएल * प्लस शुरू करते समय स्वचालित रूप से चलाया जाएगा। Find out more.

इस बारे में साफ बात यह है कि 10 ग्राम के बाद से, यह स्क्रिप्ट हर बार जब हम नहीं बल्कि सिर्फ पहली बार कनेक्ट हम एसक्यूएल * ऊपर आग प्लस ...

SQL> conn apc 
Enter password: 
Connected. 
Running login script 

Session altered. 

SQL> conn scott 
Enter password: 
Connected. 
Running login script 

Session altered. 

SQL> 
+0

हां, पुन: कनेक्ट करने के बाद login.sql का स्वचालित चलन 10 जी में एक अच्छा सुधार है। लेकिन उस संस्करण में "स्पष्ट स्क्रीन" प्रतिबद्धता लटकती है, इसलिए मेरे लिए यह 9 या 11 है। –

+0

मैं सीधे 9i से 11g तक चला गया हूं, इसलिए मुझे 10 जी की उस विशेष विशेषता के बारे में पता नहीं है। – APC

+0

शब्द "प्रतिबद्ध" मेरी पहली टिप्पणी में "कमांड" होना चाहिए –

4

मैं sqlplus का उपयोग करना चाहते चलाया जाता है, है ऑफ़लाइन में

sqlplus -S user/password @query.sql> file.txt 

जहां क्वेरी।एसक्यूएल

set feedback off verify off heading off pagesize 0 
...here goes a query... 
quit; 
/

तो मैं खिड़कियों या यूनिक्स में मेरा बल्ला/स्क्रिप्ट फ़ाइलें में डेटाबेस से जानकारी प्राप्त कर सकते है।

8

मैं विशेष रूप से ओरेकल के साथ काम करने के लिए एसक्यूएल * प्लस का उपयोग करता हूं। अन्य उत्तरों पहले से ही कुछ बहुत आसान लॉगिन.sql सामग्री देते हैं।

यह मेरा login.sql है। मैंने वहां टॉम क्यटे और विलियम रॉबर्टसन से कुछ सुझावों की प्रतिलिपि बनाई। हो सकता है कि आप कुछ चीजें ढूंढें जिन्हें आप भी उपयोग करना चाहते हैं।

set termout off 
set serveroutput on size unlimited 
set pagesize 50000 
set linesize 135 
set long 50000 
set trimspool on 
set tab off 
def _editor = "C:\Progra~1\Notepad++\Notepad++.exe" 

define gname=idle 
column global_name new_value gname 
select lower(user) || '@' || 
     substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name 
from (select global_name,instr(global_name,'.') dot from global_name); 
set sqlprompt '&gname> ' 

alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss' 
/
var sid number 
var serial# number 
var tracefile VARCHAR2(200) 

DECLARE 
    v_audsid v$session.audsid%TYPE; 
BEGIN 
    SELECT sid, serial#, audsid 
    INTO :sid, :serial#, v_audsid 
    FROM v$session 
    WHERE audsid = SYS_CONTEXT('USERENV','SESSIONID'); 

    SELECT par.value || 
      CASE WHEN par.value LIKE '%/%' THEN '/' ELSE '\' END || 
      LOWER(th.instance) || 
      '_ora_' || LTRIM(TO_CHAR(pro.spid,'fm99999')) || '.trc' AS filename 
    INTO :tracefile 
    FROM v$process pro 
     , v$session se 
     , v$parameter par 
     , v$thread th 
    WHERE se.audsid = v_audsid 
    AND pro.addr = se.paddr 
    AND par.NAME = 'user_dump_dest'; 
END; 
/

BEGIN 
    IF :sid IS NULL THEN 
     SELECT sid 
     INTO :sid 
     FROM v$mystat 
     WHERE rownum = 1; 
    END IF; 
END; 
/

set termout on 
set feedback off 
exec DBMS_OUTPUT.PUT_LINE('Sessie: ' || :sid || CASE WHEN :serial# IS NULL THEN ' (no access to V$ tables)' ELSE ',' || :serial# END) 
exec IF :tracefile IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE('Eventueel trace-bestand: ' || :tracefile); END IF 
prompt 
set feedback on 
55

आप sqlplus को रीडलाइन समर्थन जोड़ने के लिए rlwrap का उपयोग कर सकते हैं। इस तरह sqlplus चलाएं:

$ rlwrap -c sqlplus [email protected] 

अब ऊपर/नीचे कमांड इतिहास के माध्यम से स्क्रॉल होगा। इतिहास के माध्यम से पीछे की ओर खोजने के लिए ctrl-r का उपयोग करें, यह sqlplus सहनशील बनाता है।

HOST echo "set linesize" $(stty -a|head -n1|cut -f7 -d' '|cut -f1 -d';') > .tmp.sql 
@.tmp.sql 
HOST rm -f .tmp.sql 

इन सुझावों के दोनों केवल यूनिक्स पर काम:

इसके अलावा, linesize जो कुछ भी करने के लिए अपने टर्मिनल की चौड़ाई है स्थापित करने के लिए अपने login.sql में जोड़ना।

+0

rlwrap बस मेरा दिन बना दिया। धन्यवाद, दाना – Kirby

+0

लाइनसाइज चाल के लिए धन्यवाद। मैं पहले से ही इस्तेमाल कर रहा था rlwrap। दोनों मैक ओएसएक्स पर भी काम करते हैं, 'कट-एफ 7' के बजाय 'कट-एफ 6'' का उपयोग करने के लिए आपको थोड़ा अंतर होता है (या 'HOST echo "सेट लाइनसाइज" $ (stty -a | head -1 | awk' { प्रिंट $ 6} ')> .tmp.sql') – Johanna

+0

यदि आप डेबियन-आधारित डिस्ट्रो (डेबियन/उबंटू/मिंट इत्यादि) पर हैं तो आप केवल' apt-get install rlwrap 'कर सकते हैं (उबंटू 14.04 और 16.04 पर परीक्षण किया गया) । – labyrinth

संबंधित मुद्दे