簡體   English   中英

我們可以直接從命令行在 sqlcl 中運行 javascript,還是我們需要一個 sql 包裝器腳本?

[英]Can we run javascript in sqlcl directly from command line, or do we need an sql wrapper script?

我知道我可以直接從命令行運行一個 sql 文件,如下所示:

/sql -LOGON 用戶/密碼@tnsname ./scripts/sql_script.sql 參數1

而且我知道我可以從 sqlcl shell 中調用一個 javascript 程序,如下所示:

/sql>腳本腳本/js_script.js &1

問題是我是否必須使用 sql-wrapper 腳本,或者如何在沒有包裝器的情況下直接從命令行運行 javascript,如下所示:

/sql -LOGON 用戶/密碼@tnsname ./scripts/js_script.js 參數1

我怎么還沒有做到這一點? 它現在在我的待辦事項清單上..

與此同時,你可以做這樣的事情。

➜  examples echo "script lsEngines.js" | sql klrice/klrice


SQLcl: Release 21.3 Production on Tue Jul 20 13:33:26 2021

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Last Successful login time: Tue Jul 20 2021 13:33:28 -04:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

login.sql found in the CWD. DB access is restricted for login.sql.
Adjust the SQLPATH to include the path to enable full functionality.

ScriptEngineFactory Info
jdk.nashorn.api.scripting.NashornScriptEngineFactory@373f7450
    Script Engine: Oracle Nashorn (14.0.2)
    Engine Alias: nashorn
    Engine Alias: Nashorn
    Engine Alias: js
    Engine Alias: JS
    Engine Alias: JavaScript
    Engine Alias: javascript
    Engine Alias: ECMAScript
    Engine Alias: ecmascript
    Language: ECMAScript (ECMA - 262 Edition 5.1)
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

我的“lsEngines.js”是這個內容

var ScriptEngineManager = Java.type("javax.script.ScriptEngineManager")
mgr = new ScriptEngineManager();
var factories = mgr.getEngineFactories();

factories.forEach(function(factory) {

          ctx.write("ScriptEngineFactory Info\n" + factory.toString() + "\n");

          var engName = factory.getEngineName();
          var engVersion = factory.getEngineVersion();
          var langName = factory.getLanguageName();
          var langVersion = factory.getLanguageVersion();

          ctx.write("\tScript Engine: "+engName+" ("+engVersion+")\n");

          var engNames = factory.getNames();
          engNames.forEach(function(name) {
              ctx.write("\tEngine Alias: "+ name + "\n");
          })

          ctx.write("\tLanguage: "+langName+" ("+langVersion+")\n");

      })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM