Ich wollte ein Problem sehr ähnlich wie dieses lösen. Der einzige Unterschied ist, dass ich ein Werkzeug wollte, das generischer und auch DBMS-agnostisch war. Ich wollte das Tool in Produktionsumgebungen anwenden können, und einige der Zieldatenbanken waren nicht Oracle.
was ich kam, war eine Powershell-Funktion, die Parameter Ersetzung durchführt, und generiert ein sich wiederholendes Skript mit einer Sequenz von GRANT-Anweisungen. Die Ausgabe sieht wie folgt aus:
Es gibt zwei Eingaben für mein Werkzeug, eine Vorlagendatei und eine CSV-Datei.Die Vorlagendatei sieht wie folgt aus:
grant $privs
on $table
to $user;
Und die CSV-Datei sieht wie folgt aus:
privs,table,user
ALL,Employees,DBA
READ,Employees,Analyst
"READ, WRITE", Employees, Application
ALL,Departments,DBA
READ,Departments,"Analyst, Application"
Das Aufweitwerkzeug sieht wie folgt aus:
<# This function is a table driven template tool.
It's a refinement of an earlier attempt.
It generates output from a template and
a driver table. The template file contains plain
text and embedded variables. The driver table
(in a csv file) has one column for each variable,
and one row for each expansion to be generated.
5/13/2015
#>
function Expand-csv {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string] $driver,
[Parameter(Mandatory=$true)]
[string] $template
)
Process
{
$OFS = "`r`n"
$list = Import-Csv $driver
[string]$pattern = Get-Content $template
foreach ($item in $list) {
foreach ($key in $item.psobject.properties) {
Set-variable -name $key.name -value $key.value
}
$ExecutionContext.InvokeCommand.ExpandString($pattern)
}
}
}
Schließlich wird ein Beispielaufruf an die Werkzeug sieht so aus:
Expand-csv demo.csv demo.tem > demo.sql
Beachten Sie, dass die csv-Dateispezifikation zuerst und die Vorlagendateispezifikation an zweiter Stelle folgt. Beachten Sie, dass die in der Vorlagendatei verwendeten "formalen Parameter" wie Powershell-Variablen aussehen. Das sind sie. Beachten Sie, dass die in der Vorlage verwendeten Namen mit den Namen übereinstimmen, die in der Kopfzeile der CSV-Datei angezeigt werden.
Ich habe tatsächlich einen Vorläufer zu diesem Tool mit einer Vielzahl von SQL-Dialekten und auch mit anderen Zielsprachen als SQL verwendet. Ich habe es sogar verwendet, um ein sich wiederholendes Powershell-Skript zu generieren, das nichts anderes tut, als ein anderes .ps1-Skript immer wieder mit verschiedenen tatsächlichen Parametern aufzurufen.
Es ist nicht das eleganteste Werkzeug der Welt, aber es dient mir gut.
Ich denke, du musst es auf die harte Tour machen. Durchlaufen Sie die "All_TAB_PRIVS" und generieren Sie dieses Skript. Eine interessante Frage. Ich würde gerne wissen, ob es möglich ist. – Guru