alter table test ADD CONSTRAINT test_key PRIMARY KEY(key1,key2,key3,.....)key1,key2,key3,.....的取得方法是
SELECT COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'test_key'明白的达人 给我说说这个动态能不能实现?如何实现?
SELECT COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'test_key'明白的达人 给我说说这个动态能不能实现?如何实现?
解决方案 »
- 想问一个关于查询排名的问题
- 求ORACLE字段值连接的函数
- 数据库查询语句功能
- VBA中可以将查询出来的record转换为一个临时表并命名么?
- TNSPING能通,为什么dblink不能通?
- 请教4400万条数据(40GB)的存储方案!!!
- 为什么声明变量不行啊
- 在oracle 9i 中,是否还可以用statspack??如果不可以,是否有了新的取代技术?
- oracle 对系统资源的要求至少是什么配置呢?
- Oracle排序:冒泡、选择两种方法,我写的程序没结果输出,请教下大神们看看我哪里错了。代码如下
- 用Oralce存储过程如何实现表中数据的查询与转存?
- oracle10g数据库编码,改为UTF-8,请问如何更改编码
strSql varchar2(100);
begin
strSql:='alter table test add constraint test_key primary key(key1,key2,key3)';
execute immediate strSql;
end;
不好意思着急啊以下文字描述:
向表test增加PRIMARY KEY(列1,列2,.....列n),但是列名和有几个列是动态的,需要从USER_IND_COLUMNS 这个view中取出来。要实现的语句:alter table test ADD CONSTRAINT test_key PRIMARY KEY(col1,col2,col3,.....coln) col1,col2,col3,.....coln的取得方法是
SELECT COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'test_key' 难道还没说明白?
declare
strTmp varchar2(4000);
strSql varchar2(100);
begin
select wmsys.wm_concat(column_name)
into strTmp
from (SELECT column_name, 1 a
FROM USER_IND_COLUMNS
where index_name = upper('test_key'))
group by a;
strSql := 'alter table test add constraint test_key primary key(' || strTmp || ')';
execute immediate strSql;
end;
这样以后你要注意的就是以后再建立constraint时候不要和这个test_key
重复,如果想要一模一样的test_key名必须drop后重新建立
FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'test_key'
取到的存一个字符串里就行了 。
cursor aaa is SELECT COLUMN_NAME FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'TEST_KEY'; --大写
v_in varchar2(100);
begin
for rec in aaa loop
v_in:=v_in||rec.COLUMN_NAME||',';
end loop;
v_in:=substr(v_in,1,LENGTH(v_in)-1);
execute immediate 'alter table test add constraint xxx primary key('||v_in||')';
end;
/
declare
cursor aaa is SELECT COLUMN_NAME FROM USER_IND_COLUMNS
WHERE INDEX_NAME = 'TEST_KEY';
v_in varchar2(100);
begin
for rec in aaa loop
v_in:=v_in||rec.COLUMN_NAME||',';
end loop;
v_in:=substr(v_in,1,LENGTH(v_in)-1);
execute immediate 'alter table test add constraint xxx primary key('||v_in||')';
end;
/
declare
strTmp varchar2(4000);
strTmp1 varchar2(4000);
cursor curTest is
SELECT column_name a
FROM USER_IND_COLUMNS
where index_name = upper('test_key');
strSql varchar2(100);
begin
open curTest;
loop
fetch curTest
into strTmp1;
exit when curTest%notfound;
strTmp := strTmp || strTmp1 || ',';
end loop;
close curTest;
strTmp := substr(strtmp, 1, length(strtmp) - 1);
dbms_output.put_line(strtmp);
strSql := 'alter table test add constraint test_key primary key(' || strTmp || ')';
execute immediate strSql;
end;