質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

450閲覧

2つの違うテーブルに同じ値をINSERTする方法

退会済みユーザー

退会済みユーザー

総合スコア0

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/07/30 15:24

編集2018/07/30 15:33

Java

1 2public boolean update(Gyomu gyomu) throws SQLException, ClassNotFoundException { 3 4 boolean flag = false; 5 6 Connection conn = null; 7 8 try { 9 10 conn = connectManager.getConn(false); 11 12 // UPDATE文の準備(idは自動連番なので指定しない)WHERE句で指定する 13 // StringBuilderで文字列の連結ができる 14 15 //業務報告テーブルのUPDATE 16 StringBuilder sb = new StringBuilder(); 17 sb.append("UPDATE"); 18 sb.append(" GYOMUHOKOKU"); 19 sb.append(" SET"); 20 sb.append(" HOKOKUHIDUKE = ?"); 21 sb.append(" , YOTEI = ?"); 22 sb.append(" , ZISSEKI = ?"); 23 sb.append(" , TOKKIZIKOU = ?"); 24 sb.append(" , SHOKAN = ?"); 25 sb.append(" , KAKUNOSAKI = ?"); 26 sb.append(" , ZIKAIYOTEI = ?"); 27 sb.append(" , KOMENTO = ?"); 28 sb.append(" , BIKO = ?"); 29 sb.append(" , CREATEDATE = ?"); 30 sb.append(" , CREATEUSER = ?"); 31 sb.append(" , UPDATEDATE = ?"); 32 sb.append(" , UPDATEUSER = ?"); 33 sb.append(" WHERE KANRINO = ?"); 34 35 36 StringBuilder sb2 = new StringBuilder(); 37 38 sb2.append("UPDATE"); 39 sb2.append(" HOKOKUSAKI"); 40 sb2.append(" SET"); 41 sb2.append(" USERID = ?"); 42 sb2.append(" , CREATEDATE = ?"); 43 sb2.append(" , CREATEUSER = ?"); 44 sb2.append(" , UPDATEDATE = ?"); 45 sb2.append(" , UPDATEUSER = ?"); 46 sb2.append(" WHERE KANRINO = ?"); 47 48 49 // sb.toStringで、文字列にする 50 // sbのままだと、prepareStatementが受け取れない 51 PreparedStatement pStmt = conn.prepareStatement(sb.toString()); 52 PreparedStatement pStmt2 = conn.prepareStatement(sb2.toString()); 53 54 // UPDATE文中の「?」に使用する値を設定し、SQLを完成 55 56 57 //報告先seqに値が入るようにする 58 59 60 pStmt.setString(1, gyomu.getHokokuhiduke()); 61 pStmt.setString(2, gyomu.getYotei()); 62 pStmt.setString(3, gyomu.getZisseki()); 63 pStmt.setString(4, gyomu.getTokkizikou()); 64 pStmt.setString(5, gyomu.getShokan()); 65 pStmt.setString(6, gyomu.getKakunosaki()); 66 pStmt.setString(7, gyomu.getZikaiyotei()); 67 pStmt.setString(8, gyomu.getKomento()); 68 pStmt.setString(9, gyomu.getBiko()); 69 pStmt.setString(10, gyomu.getCreatedate()); 70 pStmt.setString(11, gyomu.getCreateuser()); 71 pStmt.setString(12, gyomu.getUpdatedate()); 72 pStmt.setString(13, gyomu.getUpdateuser()); 73 pStmt.setString(14, gyomu.getKanrino()); 74 75 //ステータステーブルのUPDATE 76 77 pStmt2.setString(1, gyomu.getUserId()); 78 pStmt2.setString(2, gyomu.getCreatedate()); 79 pStmt2.setString(3, gyomu.getCreateuser()); 80 pStmt2.setString(4, gyomu.getUpdatedate()); 81 pStmt2.setString(5, gyomu.getUpdateuser()); 82 pStmt2.setString(6, gyomu.getKanrino()); 83 84 // INSERT文を実行 85 int result = pStmt.executeUpdate(); 86 int result2 = pStmt2.executeUpdate(); 87 88 89 if (result == 1 && result2 == 1) { 90 // 1件更新されたら正常 91 conn.commit(); 92 flag = true; 93 } else { 94 conn.rollback(); 95 } 96 97 } catch (SQLException e) { 98 e.printStackTrace(); 99 try { 100 conn.rollback(); 101 } catch (SQLException e1) { 102 e1.printStackTrace(); 103 } 104 } finally { 105 connectManager.close(conn); 106 } 107 108 return flag; 109 } 110 111 112

sql

1 create table GYOMUHOKOKU ( 2 KANRINO NUMBER GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 99999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE 3 , HOKOKUHIDUKE DATE 4 , YOTEI NVARCHAR2(1000) 5 , ZISSEKI NVARCHAR2(1000) 6 , TOKKIZIKOU NVARCHAR2(1000) 7 , SHOKAN NVARCHAR2(1000) 8 , KAKUNOSAKI NVARCHAR2(1000) 9 , ZIKAIYOTEI NVARCHAR2(1000) 10 , KOMENTO NVARCHAR2(1000) 11 , BIKO NVARCHAR2(1000) 12 , CREATEDATE DATE 13 , CREATEUSER VARCHAR2(5) 14 , UPDATEDATE DATE 15 , UPDATEUSER NVARCHAR2(5) 16 , constraint GYOMUHOKOKU_PKC primary key (KANRINO) 17)

sql

1 create table HOKOKUSAKI ( 2 KANRINO NUMBER(5) NOT NULL 3 , HOKOKUSAKISEQ NUMBER(5) NOT NULL 4 , STETUSID CHAR(2) not null 5 , USERID VARCHAR2(5) not null 6 , CREATEDATE DATE 7 , CREATEUSER VARCHAR2(5) 8 , UPDATEDATE DATE 9 , UPDATEUSER VARCHAR2(5) 10 , primary key (KANRINO)) 11

上記のGYOMUHOKOKUテーブルに管理Noが自動的に採番されますが、
HOKOKUSAKIテーブルにGYOMUHOKOKUテーブルの値を入力するためにはどうしたらいいのでしょうか。先輩に、INSERT文を発行したときに、return?するように書いてと言われました。javaで実現したいのですが、難しすぎてわからないので、教えていただけないでしょうか。

ヒントだけもらって、Statement.RETURN_GENERATED_KEYSを使うといわれました。

流れとしては、
①GYOMUHOKOKUにINSERTする。
②INSERTした結果をもとに、HOKOKUSAKIテーブルにINSERTする。だと思っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/07/30 20:27

質問の内容から判断して、タイトルを[INSERT結果を取得する]に変えては?
guest

回答1

0

ベストアンサー

そろそろマニュアルを確認する習慣を身に付けましょう。
SQL言語リファレンス INSERT

SQL

1INSERT INTO employees 2 (employee_id, last_name, email, hire_date, job_id, salary) 3 VALUES 4 (employees_seq.nextval, 'Doe', 'john.doe@example.com', 5 SYSDATE, 'SH_CLERK', 2400) 6 RETURNING salary*12, job_id INTO :bnd1, :bnd2;

を参考に。
SQLでできることはSQL内で完結させた方がパフォーマンスが良いことが多いです。

投稿2018/07/30 20:18

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問