שאלה הפעל סקריפט Oracle SQL ולצאת מ sqlplus.exe באמצעות שורת הפקודה


אני רוצה להפעיל סקריפט Oracle באמצעות SQL Plus באמצעות שורת הפקודה של Windows. הסקריפט אינו מכיל פקודת "exit", אבל אני עדיין מעוניין ב- SQL Plus כדי לצאת, מחזיר את השליטה לשורת הפקודה עם השלמת הסקריפט. המטרה שלי היא לעשות את זה ללא שינוי התסריט. האם זה אפשרי?


101
2017-09-22 23:33




האם אתה מבצע את זה עם "sqlplus .... <scriptname" או "sqlplus ... @scriptname" ?? אני מוצא התנהגויות שונות בהתאם איזה אחד אתה עושה על יוניקס. - runrig


תשובות:


דרך נוספת היא להשתמש בפקודה זו בקובץ האצווה:

echo exit | sqlplus user/pass@connect @scriptname

128
2017-09-23 12:28



מגניב! אתה יודע איך את "היציאה" מקבל המצורפת הפגישה sqlplus?
הפקודה sqlplus מפעילה את התסריט ואז מנסה לקרוא פקודות נוספות מן הקלט הסטנדרטי. עם צינור זה, לקרוא מן הקלט הסטנדרטי יהיה לקרוא את מחרוזת "יציאה" מהפקודה הד, וגרם sqlplus ליציאה. - Dave Costa
מצוין - זה בדיוק מה שחיפשתי. תודה! - JoshL
היזהר כי אתה חושף את הסיסמה שלך שם משתמש על רשימת proces על יוניקס (ps -ef) אבל אני כמעט בטוח שזה עובד באותה דרך על Windows - Robert Merkwürdigeliebe
stackoverflow.com/questions/1639704/... ו dba.stackexchange.com/a/65064/16892 לתאר כמה דרכים לא צריך להשתמש בסיסמה בשורת הפקודה ... - rogerdpack


מצאתי את זה כדי להיות הפתרון הטוב ביותר והוא עובד במסוף או בתוך סקריפט:

echo @scriptname | sqlplus username/password@connect

12
2017-10-26 12:21



אמנם זה יכול טכנית לענות על השאלה, זה באופן משמעותי כפילות של תשובות אחרות ומוסיף ערך מועט. כמו כן, זה יעזור לאחרים אם תסביר מה הפקודות האלה עושים. תודה! - Chris S
זה עבד בשבילי ואני מוצא את זה יותר אלגנטי מאשר התשובה העליונה כי זה נמנע 'לצאת'. - Bogdan Calmac


הדרך הטובה ביותר להסתיר מידע על משתמשים ויציאות היא:

exit | sqlplus -S user/pwd@server @script.sql

exit מסופק פלט של sqlplus לאלץ אותו להפסיק. -S suprresses כל פלט שרת אחר שאילתה אז SQL בסקריפט.


12
2018-03-18 21:20



אם השימוש ssh הוא לעשות להפסיק במקום יציאה כך שהוא לא ייסגר את הפגישה ssh אם הקובץ נערך מאוחר יותר יש יציאה או להיסגר בו. זה עובד אם הקובץ לא נמצא יותר מדי. - Karl Henselin


הבנתי עכשיו כי הבעיה שלך עשויה להיות עם קובץ SQL עצמו, מבינים כי sqlplus צריך להיות אמר לצאת. הדרך בה אני עושה זאת היא:

בחר * מתוך כפול;

צא;
/

(סלאש הוא חשוב, זה אומר sqlplus לבצע את statemet (ים) מעל זה.)


11
2017-09-23 16:04



שים לב כי התשובה של דייב קוסטה עובד גם: צנרת היציאה (או צא) לתוך הפקודה sqlplus.
תודה על / טריק, חיפשתי את המידע הזה!
קו נטוי פירושו לבצע את מה שנמצא במאגר SQL. זה לא לבצע הצהרות מרובות, ואין צורך לבצע פקודות בקרת SQLPlus כמו "צא". אם תקליד "צא" <Enter> בהודעת SQLPlus אינטראקטיבית, היא תצא מיד. - Dave Costa


אתה יכול גם לעשות את זה סקריפט פגז שלך.

sqlplus /nolog <<EOF
connect user/pass
@run_some_file.sql
select * from dual;
EOF

ייתכן שיהיה עליך לברוח ";" עם \.


6
2017-09-23 12:33





ככה:

/ nolog userid / password @ tnsname @

אם אתה שם את זה בקובץ אצווה, שליטה תמשיך עם ההצהרות (s) בעקבות זה.

עריכה: הרע שלי, נסה שוב עם / nolog דגל


4
2017-09-22 23:43



למרבה הצער, זה לא עובד. כאשר אני מבצע את קובץ האצווה, SqlPlus ממתין בהודעת SQL עבור קלט משתמש במקום להחזיר את השליטה לשורת הפקודה. - JoshL
מצטערים, גם זה לא עובד. / nolog מאפשר sqlplus להתחיל בלי להיכנס. אין לזה שום קשר עם יציאה של תסריט כאשר הוא משלים. - JoshL
המממ, אני מתחיל לתהות על הבדלי הסביבה. יש לי תסריטים עטלפים רבים המשתמשים sqlplus בדרך זו.
כריס, אתה יכול לספק דוגמה עובד? פשוט משהו שמפעיל "לבחור מתוך כפול" או משהו ... יצרתי דוגמאות כדי לנסות את ההצעות שלך, ללא הועיל. זכור כי זה על Windows. - JoshL
ג 'וש, ראה תשובה חדשה להלן.


כן, זה אפשרי - ליצור סקריפט עטיפה אשר מגדיר SQLPlus כראוי, כולל את התסריט (כלומר. @YourTargetScript.sql), ולאחר מכן עושה יציאה.

עם זאת, אני לא ממליץ על גישה זו בכלל - SQLPlus יש הרבה gotchas לשימוש פרוגרמטי; בעת כתיבת סקריפטים פגז בעבר כי השתמשה אורקל, בניתי עטיפה פיתון סביב זה (הוספת התנהגות סבירה יותר טיפול שגיאה, הפרדה שפוי של הפלט בין stdout / stderr, תמיכה פלט CSV יליד, ועוד טובים כאלה), וזה עבד הרבה יותר טוב.


3
2017-09-22 23:40



עם כל תוכנית אחרת אני מסכים איתך. אבל מצאתי כי SQLPlus נתן לי הקשר שימושי על שאילתה רע כי סביבות אחרות (במקרה שלי Perl / DBI / DBD :: Oracle) לא. אם אתה עושה טיפול זהיר טיפול, זה יכול להיות שווה את הכאב.
כמו כן, תלוי כמה שליטה יש לך על השרת, אתה יכול או לא יוכלו להניח availablilty של משהו יותר ואז פגז SQLPlus. הרבה חנויות יוניקס סטוג'רי שמפעילות את Solaris, HP / UX, AIX וכדומה משתמשים בהתקנות חשופות מאוד ולא יאפשרו לך להתקין שום דבר אחר על האריזה. שים לב שלפעמים שיטה לעקיפת הבעיה היא רק לצרף מתורגמן מינימלי ליישום שלך. - ConcernedOfTunbridgeWells


עבור אלה מודאגים לגבי האבטחה של כולל את הסיסמה שלך בסקריפט, AskTom יש מאמר על "מזוהה חיצונית" http://asktom.oracle.com/pls/apex/f?p=100100:11:0::::P11_QUESTION_ID:142212348066


1
2017-07-16 19:38



אמנם זה עשוי באופן תיאורטי לענות על השאלה, זה יהיה עדיף כדי לכלול את החלקים החיוניים של התשובה כאן, ולספק את הקישור עבור הפניה. - Scott Pack


בסקריפט SQL להוסיף EXIT. הנה דוגמה הקובץ test.bat שלי כולל את הפעולות הבאות:

משתמש / pwd @ שרת @ test.SQL

הקובץ test.sql שלי יש הבא: בחר * מתוך כפול; יציאה


0
2018-06-19 20:40



זה בסדר, אבל לא עונה על הדרישה לעשות את זה מבלי לשנות את התסריט כדי לכלול הצהרה יציאה / יציאה. הכוונה היא כי סקריפטים אלה יכולים להיות מנוהלים על ידי DBA מ SQL Plus, אבל ניתן גם להפעיל מקובץ אצווה. - JoshL


יציאה | SQLPLUS / @ @

זה הפתרון הנכון, ניסיתי את זה עובד


0
2017-11-20 06:57