выполненный оракул sql сценарий от Java [дубликат]

Я нашел этот источник https://blogs.technet.microsoft.com/heyscriptingguy/2011/03/01/proxy-functions-spice-up-your-powershell-core-cmdlets/ [ 119]

В этом случае ярлык / псевдоним для Select-String -First 10 сводится к следующему:

$metadata = New-Object System.Management.Automation.CommandMetaData (Get-Command Select-Object)
[System.Management.Automation.ProxyCommand]::Create($MetaData) | Out-File -FilePath prxyfunctions.psm1

Откройте файл модуля prxyfunctions.psm1 и оберните все содержимое в новый функция называется S10

function S10 {
    [CmdletBinding(DefaultParameterSetName = 'DefaultParameter', HelpUri = 'https://go.microsoft.com/fwlink/?LinkID=113387', RemotingCapability = 'None')]
    param(

    

.ForwardHelpTargetName Microsoft.PowerShell.Utility\Select-Object
.ForwardHelpCategory Cmdlet

#>
}

Затем в разделе Begin {} добавьте одно утверждение $PSBoundParameters.Add('First','10'), как показано ниже.

begin {
        try {
            $outBuffer = $null
            if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer)) {
                $PSBoundParameters['OutBuffer'] = 1
            }
            $PSBoundParameters.Add('First','10')
            $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Utility\Select-Object', [System.Management.Automation.CommandTypes]::Cmdlet)
            $scriptCmd = {& $wrappedCmd @PSBoundParameters }
            $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
            $steppablePipeline.Begin($PSCmdlet)
        }
        catch {
            throw
        }
    }

Вот и все. Сохраните файл, импортируйте модуль, введите короткую команду типа gci c:\|s10 и получите всего 10 результатов. Если вы действительно хотите, чтобы все было надежно, нужно больше кодирования. Если используется S10 -First 2, вы получите хорошую ошибку.


РЕДАКТИРОВАТЬ в ответ на полезные комментарии @PetSerAl

Некоторые дальнейшие командлеты в конвейере могут быть не в состоянии обрабатывать функцию прокси, например Sort-Object. Сравните выходные данные этих двух строк

-join (20..1 | Select -First 10 | Sort)
11121314151617181920

-join (20..1 | S10 | Sort)


-join (20..1 | S10 -Wait | Sort)
11121314151617181920

Это можно обойти, используя параметр -Wait в командной строке. Или закодируйте параметр Wait в прокси-функции $PSBoundParameters.Add('Wait',$true)

При работе с большими коллекциями это вызывает сожаление, поскольку отключает функцию Select-Object, которая останавливает конвейер после элементов x, что приводит к большей обработке и более длительному ожиданию.

9
задан Andreas Petersson 15 October 2008 в 18:41
поделиться

5 ответов

iBATIS ScriptRunner имеет a setDelimiter(String, boolean) метод. Это позволяет Вам иметь строку кроме""; быть разделителем между SQL-операторами.

В Вашем сценарии SQL Oracle разделите операторы с "/" (наклонная черта).

В Вашем коде Java, прежде, чем звонить runScript сделайте a setDelimter("/", false) который даст ScriptRunner команду распознавать "/" как разделитель операторов.

5
ответ дан 4 December 2019 в 12:22
поделиться

sqlplus: да Вы можете. Я выполняю sqlplus из Xemacs (редактор) все время. Так, можно выполнить sqlplus в интерпретируемом режиме и затем обеспечить, он управляет, и считайте вывод также.

Другой пути должен загрузить свободный основанный на Java инструмент разработчика SQL от оракула (http://www.oracle.com/technology/software/products/sql/index.html). это идет с утилитой sqlcli.bat, которая является оберткой по программе Java. Вы могли бы хотеть использовать эту утилиту командной строки, чтобы сделать Вашу работу.

сводка, я попытался бы выполнить sqlplus в фоновом режиме и обеспечил бы, это вводится, и чтение его вывода (как emacs делает).

2
ответ дан 4 December 2019 в 12:22
поделиться

Если Вы хотите записать Вашему собственному бегуну сценария, можно использовать JDBC's Spring SimpleJdbcTemplate (http://static.springframework.org/spring/docs/2.0.x/reference/jdbc.html).

Можно, конечно, загрузить сценарии, поскольку Вы были бы любой ресурс в Spring также.

0
ответ дан 4 December 2019 в 12:22
поделиться

Вы видите реализации других людей. Посмотрите этот ресурс: "SQL-клиенты с открытым исходным кодом в Java" http://java-source.net/open-source/sql-clients

0
ответ дан 4 December 2019 в 12:22
поделиться

Используйте следующее решение для справки, я пробовал и тестировал, и оно успешно работает.

private static String script_location = "";
private static String file_extension = ".sql";
private static ProcessBuilder processBuilder =null;

public static void main(String[] args) {
    try {
        File file = new File("C:/Script_folder");
        File [] list_files= file.listFiles(new FileFilter() {

            public boolean accept(File f) {
                if (f.getName().toLowerCase().endsWith(file_extension))
                    return true;
                return false;
            }
        });
        for (int i = 0; i<list_files.length;i++){
            script_location = "@" + list_files[i].getAbsolutePath();//ORACLE
            processBuilder = new ProcessBuilder("sqlplus",        "UserName/Password@database_name", script_location); //ORACLE
            //script_location = "-i" + list_files[i].getAbsolutePath();
            //  processBuilder = new ProcessBuilder("sqlplus", "-Udeep-Pdumbhead-Spc-de-deep\\sqlexpress-de_com",script_location);
            processBuilder.redirectErrorStream(true);
            Process process = processBuilder.start();
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String currentLine = null;
            while ((currentLine = in.readLine()) != null) {
                System.out.println(" "  + currentLine);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }catch(Exception ex){
        ex.printStackTrace();
    }
}

Используйте этот фрагмент кода, попробуйте и запустите.

Спасибо пользователю, указавшему решение по ссылке ниже:

http://forums.sun.com/thread.jspa?threadID=5413026

С уважением | Nitin

7
ответ дан 4 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: