• 締切済み

数値計算結果で更新するUPDATE文の書き方

下記のようなテーブルに対して、KEKKAフィールドにSIKIの計算結果を入れたいと思っています。 --- 【TABLE_A】 SIKI VARCHAR(16) KEKKA NUMBER(5,2) SIKIには「1+(2*3)-4」といった数値計算式が入っています。 普通にselect 1+(2*3)-4 from dual とすれば返ってくる値をKEKKAに入れたいと思っています。また、SIKIフィールドには同じ値を持つレコードは存在しません。 いい方法があれば、ご教授ねがいます。

  • Oracle
  • 回答数1
  • ありがとう数2

みんなの回答

noname#87380
noname#87380
回答No.1

こんにちは。 functionを使えば良いと思いますよ。 こんな感じで。 ※数式エラーとか一切考慮してません。 CREATE OR REPLACE FUNCTION CALC ( SIKI VARCHAR2 ) RETURN NUMBER IS varSQL_Stmt VARCHAR2(256); numRet NUMBER := 0; BEGIN varSQL_Stmt := 'SELECT ' || SIKI || ' FROM DUAL'; EXECUTE IMMEDIATE varSQL_Stmt INTO numRet; RETURN numRet; END; / SHOW ERROR UPDATE TABLE_A SET KEKKA=CALC(SIKI);

関連するQ&A

  • SQL文の実行速度について

    こんにちは。SQLを勉強しています。 質問をさせてください。 Oracleテーブル(test_table:レコード数はかなりあると考えて構いません) にnumber(int),value(varchar), code(varchar)の3つのフィールドが存在 するとします。 今、codeを指定してvalueを取得したいと考えています。 (1)---------------------------- select value from test_table where code='001'; select value from test_table where code='002'; select value from test_table where code='003'; (2)---------------------------- select code, value from test_table where code='001' or code='002' or code='003' (1)と(2)ではどちらが実行速度が速いのでしょうか? 実際に実行すればわかることですが、そういった環境が ないので、確認できません。宜しくお願い致します。

  • SQL文でエラーが出ます。

    MySQLの事で質問です。 テーブル1~4を結合してフィールド「comment」を検索 する時にフィールド「postDate」の降順でソートしたい のですがエラーが出ました。 「SQLコマンド」 select text from table1 union all select comment from table2 union all select comment from table3 union all select comment from table4 where match(commentIndex) against("検索ワード" in boolean mode) order by postDate desc; 試しに union all select comment from table2 union all select comment from table3 union all select comment from table4 の部分を削除して実行してみた所、成功しました。 後、order by postDate desc;のみ削除した場合でも成功しました。 エラーの内容はこれです↓↓ Unknown column 'postDate' in 'order clause' フィールド「postDate」は存在します。 (varchar型何ですが、それがいけないと思い date型やdatetime型と変えてみましたがダメでした) 何とかソートしたいのですがどうすればいいのでしょうか?

    • ベストアンサー
    • MySQL
  • Update文について

    UPDATEについて SELECT * FROM A_table A JOIN B_table B ON (A.code = B.code) 上のように2つのテーブルをJOINして、 AのフィールドB.dateフィールドに A.dateフィールドを代入したいのですが、 どのようなUPDATE文を書けばよろしいでしょうか?

  • 文字列で読み込んだ計算式で値を計算

    VBAで数値と式を文字列で受け取り、式に従って値を返す関数を作成したいと考えています。 ex KEISANという関数に対し、値と計算式を与え結果を求める A=50 B=80 C=10 SIKI="B+A-C" KEKKA = KEISAN(A,B,C,SIKI) KEKKAには、式に従い120が返る このA~C及びSIKI(式)は外部ファイルから読み込みます。式には加算か減算しかありません。 どなたか、良いアイデアありましたら、教えて下さい。

  • SQL文 この部分はなんていうのでしょう?

    SELECT T_テーブル1.フィールド1 FROM T_テーブル1 ORDER BY T_テーブル1.フィールド1; なら、 ”ORDER BY句” SELECT T_テーブル1.フィールド1 FROM T_テーブル1 WHERE (((T_テーブル1.フィールド1)="A")); なら ”WHERE句” と言いますが、 DELETE Table1.* FROM Table1; や UPDATE テーブル1 Set テーブル1.フィールド1 = "い" WHERE (((テーブル1.フィールド1)=”あ")); や DROP Table Table1; の deleteやupdateやdropの部分は何て言うのでしょうか? そのまま、SELECT句DELETE句などというのでしょうか?

  • フィールドの値が数値かどうか調べる

    varchar(2)のフィールドがあります。 値は必ず二文字入力されています。 値が数値の時は数値以外かを判断できますか? (用途) コンボボックスのソースに下記の様に指定したいのです。 select * from T_品種 where 品種コード 「が数字だったら」 よろしくお願いします。

  • ACCESS2002のupdateの副問合せについて教えてください

    ひとつのテーブルの情報を、もうひとつのテーブルに反映させられなくて困っています。 おそらくupdateの副問合せの書き方が悪いと思うのですが、どこが悪いのか分かりません。 access2002 VBAで、同じフィールド構成を持つ2つのテーブルがあります。 TABLE_A -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|CCCC|DDDD| |333333|EEEE|FFFF| |444444|GGGG|HHHH| -------------------------- TABLE_B -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| -------------------------- このうち、ひとつのテーブル(TABLE_A)のField1 と Field2 の値を もうひとつのテーブル(TABLE_B)のField1 と Field2 の値に変更したいのです。 条件は、P_Keyが同一のレコード同士です。 実行結果は以下のようにしたいのです。 TABLE_A (TABLE_Bは更新しないため変更無し) -------------------------- |P_Key | Field1 | Fieled2| +------+--------+--------+ |111111|AAAA|BBBB| |222222|ZZZZ|YYYY| |333333|XXXX|WWWW| |444444|GGGG|HHHH| -------------------------- VBAでupdateのSQLを書いているのですが、うまくいきません。 以下のSQLではDMLが正しくないのエラーになってしまいます。 (すみません。正式なエラーメッセージは失念しました) update TABLE_A set( TABLE_A.Field1,TABLE_A.Field2 ) = ( select TABLE_B.Field1,TABLE_B.Field2 from TABLE_B where TABLE_A.P_Key = TABLE_B.P_Key ); テーブル名に別名をつけたりしても同様にDMLが正しくないと怒られます。 質問は、以下の2つです。 1.上記更新は、ひとつのupdateのSQLで可能でしょうか?   それともTABLE_B を Selectでまわして、TABLE_Aのレコードを一行ずつ   更新していく必要があるのでしょうか? 2.1.が可能の場合、私の書いたSQLについてご助言をいただけませんでしょうか? もしご存知の方おられましたら、ご教示をお願いできませんでしょうか? 以上です

  • SQL文作成のお願い

    前提として下記のようなテーブルがあります。 テーブル名:test フィールド: 1)id: varchar, not null 2)name: varchar 3)date: timestamp with time zone, not null このテーブルに下記のようなレコードがあります。 '00001', 'A', '2005-01-01 00:00:00' '00001', 'B', '2005-07-01 00:00:00' '00001', 'C', '2005-11-01 00:00:00' '00002', 'X', '2005-01-20 00:00:00' '00002', 'Y', '2005-07-20 00:00:00' '00002', 'Z', '2005-11-20 00:00:00' ■今やりたいこと このテーブルからidごとにdateフィールド値が最近のレコードを取得したい。 ■やってみたこと 下記SQLを発行しました。 >select id, max(date) from test group by id order by id 結果==> 00001 2005-11-01 00:00:00 00002 2005-11-20 00:00:00 実際はnameフィールドの値も取得したいのですが、group by句を使うとフィールド指定ができませんでした。 ■だめだったSQL select id, name, max(date) from test group by id order by id どのようにSQLを書けばよろしいでしょうか?

  • CONCAT内の数値が、別の長い数値に変換されます

    お世話になります。 MySQL5をphpMyAdminで利用しています。 フィールド項目の属性が文字列(VARCHAR)の際には表示OKなのですが、 以下のような数値フィールド属性(BUN_CODE、およびBUN2_CODE)だと、 SELECT文を実行した際に もともと入っている正しい数値ではなく、 なぜか、別の長い数値(意味不明の長い数値)に、 変換されて表示されてしまいます。 SELECT concat(  case when  a.`BUN_CODE`<>b.`BUN_CODE` then ""  else a.`BUN_CODE`   end,    case when  a.`BUN2_CODE`<>b.`BUN2_CODE` then ""  else a.`BUN2_CODE`   end  ) AS DMYDATA FROM (  SELECT * FROM `DMY_TABLE`  WHERE `ID_CODE`=12345 ) AS a, (  SELECT * FROM `DMY_TABLE`  WHERE `ID_CODE`=67890 ) AS b; 質問内容ですが、 数値属性のフィールドに対しては、 何か付け加えないと、上記の場合には、 正しい値を表示出来ないのでしょうか? 以上になります。 情報をお持ちの方がいらっしゃいましたら、 ぜひ教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • 副問合せをいれたINSERT文で、問合せ結果が無い場合

    副問合せをいれたINSERT文で、問合せ結果が無い場合 環境はSQL Server2005です。 テーブルA,テーブルBが存在し、テーブルAにレコード追加する際に一部をテーブルBから抽出して、 INSERTしようとしています。 [SQL文]  INSERT INTO テーブルA(フィールド1, フィールド2, フィールド3,フィールド4・・・)   SELECT 'AAA', 'BBB' ,B.フィールド3, B.フィールド4 ・・・   FROM テーブルB B WHERE ~ この場合、テーブルBにWHEREで指定した条件のレコードが存在しない場合はINSERTされなくなってしまいます。 存在しない場合は、該当のフィールドにはNULLをいれたいのですが、テーブルBからの結果が存在しない場合でも テーブルAにINSERTする方法はありますか?