回答

收藏

Oracle中的变量操作

技术问答 技术问答 314 人阅读 | 0 人回复 | 2023-09-11

因此,我整个下午一直在网上闲逛,以找到答案。我有一个看起来像这样的表:$ G, Q9 G  |, l3 `  m: T
CREATE TABLE ldap_domains (
0 r, ]2 E% \' ]0 {' K5 P    domain varchar(128) NOT NULL,
6 }7 e" q- Z) |    name varchar(16) NOT NULL,7 M8 D* B9 e: R% s) y0 U
    description varchar(32) NOT NULL
) J( u& A% L$ G, s' ?, k( \)
$ W' _# j4 g* T9 ~ALTER TABLE ldap_domains0 c' M$ W9 @  ?0 [& ^
ADD CONSTRAINT pk_domain PRIMARY KEY (domain);2 e% q. y7 |/ A8 G* g8 v$ f
INSERT INTO ldap_domains VALUES ('test', 'test', 'test');
  N" ?( O; z0 \( a$ VINSERT INTO ldap_domains VALUES ('test1', 'test', 'test');
+ y: B  e$ X) k3 y8 Q% x* ]! ?. cINSERT INTO ldap_domains VALUES ('test2', 'test', 'test');
6 H  z. K8 G& S# q9 GINSERT INTO ldap_domains VALUES ('test3', 'test', 'test');' S! s; m% O0 Q% M" I) E
我需要修改此表,以便新列成为主键。作为此过程的一部分,我需要在应用约束之前使用唯一值更新新列。看起来像这样:+ Y+ ?6 P% L# r# g  q
ALTER TABLE ldap_domains
: g$ w( _; O4 pDROP CONSTRAINT pk_domain;
+ z+ r% w' N* z+ w- i4 `/ [ALTER TABLE ldap_domains
6 U2 F' c/ p# MADD id int;
& Y7 G$ m  M7 U/ o4 S" C% t4 cDECLARE @key int, J0 U6 J  ~: x/ y: W4 Q4 S
SET @key = 0
- k. e( x2 X# |1 M' F2 G) TUPDATE ldap_domains SET @key = id = @key + 1;% C; a$ y6 Y3 P
ALTER TABLE ldap_domains
! D2 n- k1 g5 d; s% ?ALTER COLUMN id int NOT NULL;
+ O4 Q3 }9 p, q7 S3 l2 `3 D2 w: bALTER TABLE ldap_domains
" b/ `, `" N& U* k; xADD CONSTRAINT pk_id PRIMARY KEY (id);
, E* c1 L4 n, _& }. u. O这在SQLServer上可以正常工作,但是,我也需要在Oracle上也可以使用。本质上,Oracle不喜欢的部分是:
" k7 R- v+ |2 P/ NDECLARE @key int
; h: T5 d& @, {$ C0 [3 K. x, XSET @key = 0
* X  G) W1 m  ~* AUPDATE ldap_domains SET @key = id = @key + 1;
' a. p8 ^9 P5 A7 E' ~% F% Q# c+ K6 P谁能启发我?
) q6 k* S& T5 B" M1 L               
/ b" H& F6 O& ]3 ?: c# _8 R解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则