SSブログ

別テーブルの値で対象テーブルの値を更新 [Oracle]

テーブルの値を更新する際に、別のテーブルからもってくる。oracleでやってみました。


TABLE_A
KEY_A number(10,0)
KEY_B number(10,0)
COL1 varchar2(10)

TABLE_B
KEY_B number(10,0)
COL1 varchar2(10)

TABLE_AのCOL1にTABLE_BのCOL1の値をセットする。


【誤ったやりかた】
update TABLE_A a
set COL1 = (select b.COL1 from TABLE_A a,TABLE_B b where a.KEY_B=b.KEY_B);

こんなエラーが発生
SQLエラー: ORA-01427: 単一行副問合せにより2つ以上の行が戻されます
01427. 00000 -  "single-row subquery returns more than one row"


副問合せ内のfromに更新対象テーブルを記載してはダメ!
【正しいやり方】
update TABLE_A a
set COL1 = (select b.COL1 from TABLE_B b where a.KEY_B=b.KEY_B);

 

これで解決しました。


Oracleテーブルでclob、blobを使った際、格納データサイズを調べる方法 [Oracle]

サンプルテーブルはこちら。
create table lob_table(
  id number,
  lob_data clob
);

clobで定義したlob_dataの格納データサイズを取得するには、DBMS_LOB.GETLENGTHを使用する。
こんな感じ。
select id, DBMS_LOB.GETLENGTH(lob_data) from lob_table;

blobで同じように使えます。

Oracle timestamp型項目をシステム時刻で更新 [Oracle]

Oracleでシステム時刻を扱うにはsystimestampを使う。


update x_table

set access_time = systimestamp

where id=1;



これだけ。実に簡単。


表名一覧の取得 [Oracle]

select table_name from user_tables order by TABLE_NAME


ログオン時のユーザ名とパスワードを忘れてしまった [Oracle]

もちろん、元のパスワードは暗号化されているので、調べることができない。
そこでパスワード変更を実施する。

SYSDBAで接続して、
select username from dba_users;
でユーザ名を確認し、
ALTER USER identified by ; でパスワードを変更する。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。