Oracle 问题

英文字母打字员 2012-04-09 01:33:50
给出数据表名,根据表名查询出列名,根据列的数据类型插入为空的数据,比如 int 插入 0 VARCHAR2插入“”等等
求个SQL 怎么解决
...全文
87 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
求个动态INSERT的存储过程
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
引用 5 楼 的回复:

SQL code


CREATE TABLE T(
ID INT,
XH INT,
XM VARCHAR2(10)
);

INSERT INTO T VALUES (1,NULL,'A');
INSERT INTO T VALUES (2,2,'B');
INSERT INTO T VALUES (3,NULL,……
[/Quote]
动态插入的方法,insert
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
这还不动态?你要多动态。。。


看着都笑了 想来LZ想要全智能动态吧 一般动态不能满足需求
[/Quote]
其实就是根据字段类型插入信息,我不会这ORACLE才在这里问问
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
这还不动态?你要多动态。。。
[/Quote]

看着都笑了 想来LZ想要全智能动态吧 一般动态不能满足需求
ssqtjffcu 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:

SQL code


CREATE TABLE T(
ID INT,
XH INT,
XM VARCHAR2(10)
);

INSERT INTO T VALUES (1,NULL,'A');
INSERT INTO T VALUES (2,2,'B');
INSERT INTO T VALUES (3,NULL,NULL);
INSERT ……
[/Quote]
这还不动态?你要多动态。。。
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

SQL code


CREATE TABLE T(
ID INT,
XH INT,
XM VARCHAR2(10)
);

INSERT INTO T VALUES (1,NULL,'A');
INSERT INTO T VALUES (2,2,'B');
INSERT INTO T VALUES (3,NULL,NULL);
INSERT INTO T VALUES (4,4,NULL);……
[/Quote]
可以给个动态插入的吗???
ssqtjffcu 2012-04-09
  • 打赏
  • 举报
回复


CREATE TABLE T(
ID INT,
XH INT,
XM VARCHAR2(10)
);

INSERT INTO T VALUES (1,NULL,'A');
INSERT INTO T VALUES (2,2,'B');
INSERT INTO T VALUES (3,NULL,NULL);
INSERT INTO T VALUES (4,4,NULL);
INSERT INTO T VALUES (5,NULL,NULL);
COMMIT;

CREATE OR REPLACE PROCEDURE PRO_UPDATE_TEST(I_TABLE_NAME VARCHAR2)
AS
V_UPDATE_SQL VARCHAR2(4000);
BEGIN
V_UPDATE_SQL := 'UPDATE '||I_TABLE_NAME||' SET ';
FOR I IN (SELECT T.COLUMN_NAME,T.DATA_TYPE FROM USER_TAB_COLUMNS T WHERE T.TABLE_NAME='T') LOOP
V_UPDATE_SQL := V_UPDATE_SQL||' '||I.COLUMN_NAME||'=NVL('||I.COLUMN_NAME||',';
case i.data_type
when 'NUMBER' THEN
v_update_sql := v_update_sql||'0),';
when 'INT' THEN
v_update_sql := v_update_sql||'0),';
when 'INTEGER' THEN
v_update_sql := v_update_sql||'0),';
when 'VARCHAR2' THEN
V_UPDATE_SQL:= V_UPDATE_SQL||'''''),';
ELSE
V_UPDATE_SQL:= V_UPDATE_SQL||'NULL),';
END CASE;
END LOOP;
V_UPDATE_SQL:= TRIM(',' FROM V_UPDATE_SQL);
DBMS_OUTPUT.put_line(V_UPDATE_SQL);
EXECUTE IMMEDIATE V_UPDATE_SQL;
COMMIT;
END;


SQL> SELECT * FROM T;

ID XH XM
--------------------------------------- --------------------------------------- ----------
1 A
2 2 B
3
4 4
5

SQL> EXEC PRO_UPDATE_TEST('T');

PL/SQL procedure successfully completed

SQL> SELECT * FROM T;

ID XH XM
--------------------------------------- --------------------------------------- ----------
1 0 A
2 2 B
3 0
4 4
5 0
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code

--根据表名查询出表中所有列名 表名都是大写
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'SYSMODEL' ORDER BY COLUMN_ID



插入默认值就行了
[/Quote]
是动态插入列
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

老板 你还是先看看书比较好
[/Quote]

哈哈 我不会玩ORACLE 才问 MSSQL 我就会 也不会来问
  • 打赏
  • 举报
回复

--根据表名查询出表中所有列名 表名都是大写
SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'SYSMODEL' ORDER BY COLUMN_ID


插入默认值就行了
kingkingzhu 2012-04-09
  • 打赏
  • 举报
回复
老板 你还是先看看书比较好

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧