0

既存のテーブルの一部の値を修正するために、ワンショット スクリプトを実行する必要があります (つまり、実際のシステムにはデプロイされません)。

スクリプト自体は関係ありません。ここでの問題は、「いくつかの値」の部分です。調整するデータ (キーと古い値と新しい値) は、スプレッドシートで収集されました。多くの行があり、4 つまたは 5 つの列があるとします。

MSSQL Server 用語では、入力値を保持する一時テーブルを作成し、スプレッドシートを CSV にエクスポートした後にそれらをすべて入力します (さらに、おそらく sed(1) または paste(1) UNIX シェル コマンドを使用して、いくつかのテキスト変換を行います)。

CREATE TABLE #inputdata (col1 AS INTEGER, col2 AS VARCHAR ...);

INSERT INTO #inputdata VALUES (...);
...
INSERT INTO #inputdata VALUES (...);

-- then comes the script which can SELECT FROM #inputdata
-- just like a normal table

Oracleでこれを行う必要があります。

Oracleの一時テーブルは、データに関する一時的なものにすぎないようです。つまり、使用する前にデータベースに既に存在している必要があります。私にはそれを作成するために必要なアクセス許可がありません。SQLServer では、通常のテーブル作成権限に関係なく、一時テーブルを作成できます。

何か案は?

4

1 に答える 1

0

WITH 句の問題を解決しました。

WITH inputdata AS (
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    ...
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL
)
SELECT ...
FROM .... INNER JOIN inputdata ON ...
WHERE inputdata...

私のスクリプトでは、SELECT と INSERT のみが関係していました。

INSERT の場合、構文は次のようになります。

INSERT INTO tableX (...)
WITH inputdata AS (
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    ...
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL UNION ALL
    SELECT  ... AS col1, ... AS col2, ... FROM DUAL
)
SELECT ...
FROM .... INNER JOIN inputdata ON ...
WHERE inputdata...
于 2014-06-12T13:24:48.807 に答える