Intereting Posts
Группируйте, чтобы создать вертикальную коалесценцию Получить вновь созданный идентификатор строки в исходном запросе hibernate Прогматическая проверка «CheckBoxCell» в DataGridView Сортировка по выражению в mySQL Запрос SQL возвращает «Ошибка разрешения перегрузки» В чем разница между маской даты «yy» и «rr»? Добавляет ли посторонние таблицы в предложения WITH замедление запроса в PostgreSQL? Удалить все, кроме вершины n из таблицы базы данных в SQL Ошибка SQL Anywhere -728: операция обновления была предпринята при невосстанавливаемом удаленном запросе порядок столбцов в инструкции SELECT * – гарантируется? SQL Server: SQL-запросы по сравнению с общим программированием Получить идентификатор последних вставленных записей Попытка удалить из Join, и я знаю, что у меня навороченный интервал, и я знаю, что у меня есть дубликат IMEI Ошибка обработки в SQL Trigger без сбоев? Я получил ошибку «Операция DELETE противоречила ограничению REFERENCE»

Как запустить скрипт SQL Plus в PowerShell

Я пытаюсь войти в БД Oracle с помощью PowerShell и запустить сценарий под названием «C: \ Users \ Administrator \ Desktop \ oracle \ OracleCleanTest.sql». Когда я выполняю PS, ничего не происходит.

Вот что у меня есть.

$adminLogon = "sys as sysdba/manager@ORCL" $logon = "sqlplus\sql/manager@ORCL" $mydata = Invoke-SqlPlus -inputfile "@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql" $logon 

Я тоже пробовал это.

 $database = "ORCL"; $user = "sys as sysdba"; $pw = "manager"; sqlplus.exe -d $database -U $user -P $pw -I "@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql" 

Я попробовал это.

 & 'C:\app\Administrator\product\11.2.0\client_1\BIN\sqlplus.exe' 'QE-JDBC-1/manager@ORCL sys as sysdba' '@C:\Users\Administrator\Desktop\oracle\OracleCleanTest.sql' 

Я получаю сообщение об ошибке: &: модуль sqlplus не может быть загружен. Для получения дополнительной информации запустите «Import-Module sqlplus». В строке: 5 символов: 3 + и $ mydata Invoke-SqlPlus -inputfile «@C: \ Users \ Administrator \ Desktop \ oracle \ Orac … + ~~~~~~~ + CategoryInfo: ObjectNotFound: (sqlplus \ sql / manager @ ORCL: String) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: CouldNotAutoLoadModule "

Я использую оператор вызова & , как предложил Кейт Хилл с вопросом: Как запустить EXE-файл в PowerShell с параметрами с пробелами и кавычками .

 & 'path\sqlplus.exe' 'system/password@dbase as sysdba' 

Я поместил имя пользователя, пароль в кавычки из-за пробелов.

Чтобы запустить скрипт, я добавляю еще один параметр:

  & 'path\sqlplus.exe' 'system/password@dbase as sysdba' '@my_script.sql' 

Если вы получаете ошибку ORA-12154, и знаете, что у других пользователей установлены соединения (что означает, что прослушиватель базы данных работает правильно); Затем я бы рассмотрел, может ли SQL * Plus найти файл tnsname.

Моя первая задача состояла бы в том, чтобы увидеть, могу ли я сделать tnsping следующим образом в Windows cmd.exe:

 tnsping orcl 

Он подтвердит, что соединение может (или не может быть установлено).

Если это невозможно, я бы проверил, задана ли переменная окружения ORACLE_HOME. SQL * Plus использует это, чтобы найти файл tnsname.ora.

Если он не установлен, я бы выполнил этот оператор в PowerShell (чтобы установить эту переменную среды):

 [Environment]::SetEnvironmentVariable("ORACLE_HOME", "C:\app\Administrator\product\11.2.0\client_1" , "User") 

Затем я попробую повторить попытку (указанную выше).

После успешной попытки повторить попытку выполнить команду запуска скрипта выше.

В командной строке Windows PowerShell код не требует настройки переменной или чего-либо интересного. Просто сделайте это:

sqlplus ElBankoUser\SupaSecretyPass "@C:\Users\ElBankoUser\Documents\MaFancySckrp.sql"

Я использую это:

 $cmd = "cmd.exe" $args = ("/c sqlplus {0}/{1}@{2}:{3}/{4} @{5} {6}" -f $userName, $password, $tnsAlias, $port, $dbInstance, $sqlScript, $outputFileName) &$cmd $args 

Вы можете использовать библиотеку DLL библиотеки .NET Oracle , просто убедитесь, что у вас есть необходимый DLL-файл в папке lib

 Add-Type -Path "lib\Oracle.ManagedDataAccess.dll" $query = "select 1 as Col1, 2 as Col2, 3 as Col3 from dual union select 4 as Col1, 5 as Col2, 6 as Col3 from dual union select 7 as Col1, 8 as Col2, 9 as Col3 from dual" $cn = New-Object Oracle.ManagedDataAccess.Client.OracleConnection -ArgumentList "TNS-ConnectionString-Here" $cmd = New-Object Oracle.ManagedDataAccess.Client.OracleCommand -ArgumentList $query $cmd.Connection = $cn try { $cn.Open() $reader = $cmd.ExecuteReader() while ($reader.Read()) { $col1 = $reader["Col1"] $col2 = $reader["Col2"] $col3 = $reader["Col3"] Write-Host $col1, $col2, $col3 } } catch { Write-Error $_.Exception.Message } finally { $cmd.Dispose() $cn.Dispose() }