• ベストアンサー

oracleで別のグローバルデータベースのテーブルからPL/SQLでデータをinsertする方法。

こんにちは。 別の場所に設置してあるoracleのデータベースからinsert文でデータを引っ張って来れないかと思っています。 ご存知の方いらっしゃれば宜しくお願い致します。 内容: ここのoracleです。 グローバルデータベース名:testa.ok.com (データベース名:testa) スキーマ名:output テーブル名:名称マスタ 項目内容:番号、名前 ユーザ名:tosi password:tosi あっちのoracleです。 グローバルデータベース名:testb.ok.com (データベース名:testb) スキーマ名:input テーブル名:名称マスタ 項目内容:番号、名前 ユーザ名:tosi password:tosi PL/SQLで出来ないものでしょうか? 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 データベースリンクを使用すれば可能です。 まず、あっちのデータベース (testb.ok.com) に接続 するための接続文字列をtnsnames.ora に定義します。 → sqlplus tosi/tosi@接続文字列 でtestb.ok.com   に接続できる事を確認して下さい。 次にtesta.ok.com 側にデータベースリンクを作成します。 Create database link DBリンク名  connect tosi identified by tosi using '接続文字列'; → select ~ from input.名称マスタ@DBリンク名   where ~  で、データベースリンク経由でデータにアクセスできること  を確認して下さい。 後は、SQL 文 (PL/SQL でも可) の中で Insert into 名称マスタ select * from  input.名称マスタ@DBリンク名 where ~; とすれば、Ok です。

tosi0000
質問者

お礼

有り難う御座います。 ちょうどテーブル名称指定のところで難儀していました。 明日に再度チャレンジします。

tosi0000
質問者

補足

有難う御座います。 出来ました。 リンクがアクティイブにならなくて、ちょっと苦労しました・・・・。

その他の回答 (1)

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

やったことは ないのですが、DBリンクをはれば、出来そうな気がします。

参考URL:
http://www20.big.or.jp/~o-shin/bbs/bender/others/pslg17.html
tosi0000
質問者

お礼

早速の回答、有り難う御座います。 DATABASELINKまでは出来ました。 ファイル名の指定で難儀していますが、 出来そうな感じがしています。

関連するQ&A

  • 異なるスキーマからデータを抽出するには?oracl、PL/SQL

    Oracle初心者です。検索してもなかなかhitしないので、質問させていただきます。 aaaとbbbというスキーマがあると仮定します。 aaaにはパスワードテーブル bbbにはユーザテーブルがあるとします。 ユーザテーブル、パスワードテーブルにはそれぞれuser_idカラムがあり、そのuser_idをキーにして、aaaのpasswordカラムのデータを取得したいと思っています。 sql*plusでbbbに接続して、作業をしています。 言語はPL/SQLを使用しています。 単純に SELECT a.password FROM aaa.パスワードテーブル a, bbb.ユーザテーブル b WHERE a.user_id = b.user_id とすれば良いのかと思っていたら、違うようで、オブジェクトが存在しないと言うエラーになりコンパイルが通りません。 このよう違うスキーマのテーブルを参照する場合、どのようにすれば良いのでしょうか?

  • oracle sqlで先頭の1件を取得

    こんにちはみなさん。 現在、Oracle10gR2を使用しています。 そこで、以下のようなテーブルが存在します。 table_A(明細テーブル) denday | cd | suu | kingaku 2011/03/05 | 1| 1| 1000 2011/03/10 | 1| 2| 2000 table_B(マスタ) cd| henkoday | nm 1 | 2011/03/01| testA 1 | 2011/03/02| testB 1 | 2011/03/06| testC 上記マスタはcd、henkodayで管理しています。 上記table_Aとtable_Bを結合したいと思います。 そこで select t1.* ,t2.* from (select * from table_A order by denday) t1, (select * from table_B order by cd,henkoday desc) t2 where t1.cd=t2.cd and t1.denday>=t2.henkoday とした場合、マスタの3件分、明細データの重複ができてしまいます。 それを、直近の該当マスタのみ参照したいのですが、 以下のようなデータ抽出 table_A(明細テーブル)     table_B(マスタ) denday | cd | suu | kingaku | cd | henkoday | nm 2011/03/05 | 1 | 1 | 1000 | 1 | 2011/03/02 | testB 2011/03/10 | 1 | 2 | 2000 | 1 | 2011/03/03 | testC そのSQLがわかりません。 どうかよろしくお願いします。

  • MS-Queryで、ログインしたユーザ以外のスキーマを参照している

    MS-Query でORACLEデータベースにログインしました。 SQLの実行で、テーブルの内容を参照したのですが、 テーブルがログインしたスキーマの内容と一致しませんでした。 SQLを見てみると、ログインしたスキーマと別のスキーマのテーブルを参照していました。 通常FROM句でスキーマ名を省略してテーブル名を記述した時、 ログインしたユーザのスキーマ名になると思うのですが、別のスキーマになっていました。 これは何か設定が悪いのでしょうか?

  • 異なるデータベース間のテーブル結合

    DB名:db1 TABLE名:得意先マスタ DB名:db2 TABLE名:ユーザマスタ 以上のように、異なるデータベースに存在する2つのテーブルをLEFT JOINさせたいです。 結合条件は ユーザマスタ.得意先コード = 得意先マスタ.得意先コード とします。 この場合の結合方法を教えてください。 以下のようなSQL文を書いても駄目でした。 SELECT * FROM db1.ADMINISTRATOR.得意先マスタ AS  得意先マスタ   LEFT OUTER JOIN db2.ADMINISTRATOR.ユーザマスタ AS ユーザマスタ ON ユーザマスタ.得意先コード = 得意先マスタ.得意先コード よろしくお願いいたします。

  • オラクルのグローバルデータベース名について

    グローバルデータベース名またはSIDはどこに設定されているのでしょうか?環境変数?レジストリ? 問題はOracle8iをアンインストールしてOracle9iのインストール時に同じグローバルデータベース名もしくはSIDがありますというエラーメッセージが出てしまいます。同じ名称でDBを作成したいのですが。 アドバイスお願いします。

  • Oracle9i データベースの作成方法

    Oracle9iを使っていますが、もう1つデータベースを追加したいと思っています。 (テーブルスペースやユーザは、DB作成後に作成します) Database Configuration Assistantを使いたいのですが、方法が良く分かりません。 (1)データベース:テンプレート ここでは[New Database]を選択すれば良いのでしょうか? (2)データベース識別情報 グローバルデータベース名とは、Oracle9iをインストールした時に設定したものを入力するのでしょうか? グローバルデータベース名を入力すると、SIDにも同じものが同時に入力されますが、ということは新しいデータベースに対する[SID]と同じものを入力して良いのでしょうか? (3)データベース:オプション Webでオプションのチェックは全てはずしてOKという記述を見たのですが、チェックをはずそうとすると[このデータベースの関連した表領域"xxxx"があります、この表領域も削除しますか?]というような注意が出されるオプションもあるのですが、全て削除として良いのでしょうか? (4)データベース接続オプション 通常(特に大規模なシステムとかでない場合)は専用サーバーモードで良いのでしょうか? (5)初期化パラメータ メモリはカスタムで設定するのでしょうか? その際、Javaを使わないのが確実だったりすると、[Javaプール]は[0]にしても大丈夫でしょうか? その他は初期値で問題ないでしょうか? (6)データベース記憶域 テーブルスペースは、何だか色々あるのですがそのままで良いのでしょうか? またデータファイルというのは、サイズも大きくてあんなにたくさんあるものなんでしょうか? 今あるデータベースは、インストール時に作ったものだったので、こんな細かい?設定などした記憶もなく、方法が分かりません・・・ よろしくお願い致します。

  • AccessでOracleのテーブルをリンクし、Access側では読み取り専用にしたい

    社内にOracleデータベースでのシステムが立ち上がっているのですが、管理帳票の出力用に、OracleのデータをAccessで読み込みたいと思っています。 テーブルのリンクそのものは知っており、成功しているのですが、Oracleデータベースのデータを壊さないようにするため、このリンクテーブルを読み取り専用にしたいと思っています。どのようにすれば良いでしょうか。 なお、Oracle側で読み取り専用ユーザを作成して、そのユーザでリンクすれば良いことは理解していますが、それは最後の手段にしたいと思っています。別の方法でうまくできないでしょうか。

  • データベースのフィールドそのものを自由に定義できるテーブル設計とは

    はじめまして。 この度、ユーザからの入力をデータベースに保存する複数アンケートフォームを作成しようとしています。 その際、各アンケートフォームごとに入力項目名、入力タイプ好きな数だけ管理側から設定できる仕様です。 このような通常フィールド(列)となる部分の名称やデータタイプを自由に設定できるデータベース設計がうまくいきません。現場ではどのようにしてやられてるのでしょうか? 私が思いつく限りでは ---------------------- アンケートフォームテーブル ・アンケートフォーム番号(PK) ・アンケート名称 ---------------------- 項目雛型テーブル ・項目番号(PK) ・データタイプ ---------------------- 項目実体 ・アンケートフォーム番号(PK) ・項目番号(PK) ・項目名称 ・表示状態 ---------------------- 上記のような構造にした場合、ユーザ毎のアンケートデータを保存するテーブル構造が思いつきません。 作成できる項目数の限度を30に決めて、予め30フィールド、テキスト型のようなものを用意しておくのも狭い利用範囲になる気がしますが・・・ アドバイスをお願いします。

  • アクセスからSQL Serverのデーターを更新することができない。

    アクセスのデーターをSQLサーバーへ移行する計画があり、準備のため SQL Developer バージョンで独習中です。SQLサーバーにコピーしたテーブルにアクセスからログインするとテーブルは見られるのですが、データーの変更については「このレコードセットは更新できません」と表示されます。権限の問題ではないかと思われます。 環境と現状の設定: XP Professional SQL Server 2008 Developer Visual Studio 2008  サーバー名: SVR-1 セキュリティー ログイン名: SVR-1\taro サーバーロールのメンバーシップ:sysadmin データーベース名: project ユーザー名: dbo ログイン名: SVR-1\taro 既定のスキーマ: dbo 所有されているスキーマ:なし データーベースのロールメンバーシップ: db_owner 不思議なことに、Visual Studio 2008を使って試作したデーターベースはアクセスから書き換えができます。セキュリティーの設定も何ら変わりがないのですが。 データーベース (project)のユーザー名(dbo)の「所有しているスキーマ」にあるdata_reader, data_writer欄にチェックをいれても結果は同じです。 どこをどのように設定すれば良いのか、ご教示戴きますようお願い致します。

  • oracleのテーブルExportについて

    oracle10gを使用しております。 テーブルに億桁のレコードが登録してある場合、 テーブルExportを行うと時間がかかってしまう&出力dumpファイルが 大きくなってしまうといった弊害があると思うのですが、 テーブルレコードを数万単位に分割してExportすることは可能でしょうか? また、その分割したファイルをImportする際は、Export前と同じく 一つのテーブルでレコードを管理することが可能でしょうか。 大雑把な質問で申し訳ありませんが、宜しくお願いします。 また、今回Export時に使用するコマンドは以下になります。 exp スキーマ名/パスワード constraints=y grants=y indexes=y tables=テーブルA file= テーブルA.dmp log=テーブルA.log