怎样用VB创建dbf临时表

waywin 2000-08-28 08:42:00
我想用VB从一个Dbf表中的到某些字段得到一个临时表,写法如下:
Dim DbWork As Workspace
Dim DbsDbf As Database
Dim RstCur1, RstCur2 As Recordset
Dim StrCur1, StrCur2 As String

Set DbWork = DBEngine.Workspaces(0)
Set DbsDbf = DbWork.OpenDatabase(Trim(Text1.Text), False, True, "FOXPro 3.0")
'从表中建立Recordset对象
StrCur1 = "SELECT * into 表1 from 表2 where "
Set RstCur1 = DbsDbf.Execute(StrCur1, dbFailOnError)
结果总是出现错误:“缺少函数或变量!”
另外,我把select into 语句换成普通的select语句,可是还是一样!
请问各位问题出现在哪里,难道dbf的database对象不支持Execute方法?
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
waywin 2000-08-29
  • 打赏
  • 举报
回复
对不起,这是我的笔误,
VB编译错误出现在Execute上
bucher 2000-08-28
  • 打赏
  • 举报
回复
"SELECT * into 表1 from 表2 where "后面缺少条件
1.增加主键 alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN); 指定表空间 alter table TABLE_NAME add constraint KEY_NAME primary key (TABLE_COLUMN) using index tablespace TABLE_SPACE_NAME; 2.增加外键 alter table TABLE_NAME add constraint FK_NAME foreign key (TABLE_COLUMN) references KEY_TABLE_NAME; 3.使主键或外键失效、生效 alter table TABLE_NAME disable(enable) constraint KEY_NAME; 4、查看各种约束 select constraint_name,table_name,constraint_type,status from user_constraints; select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper(\'&table_name\') select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper(\'&table_owner\') and c.table_name = upper(\'&table_name\') and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position; 5、删除主键或外键 alter table TABLE_NAME drop constraint KEY_NAME; 6、建外键 单字段时:create table 表名 (col1 char(8), cno char(4) REFERENCE course); 多个字段时,在最后加上 Foreign Key (字段名) REFERENCE 表名(字段) 连带删除选项 (on delete cascade 当指定时,如果父表中的记录被删除,则依赖于父表的记录也被删除 REFERENCE 表名() on delete cascade; 7、删除带约束的表 Drop table 表名 cascade constraints; 8:索引管理 <1>.creating function-based indexes sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped); <2>.create a B-tree index sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer] sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0 sql> maxextents 50); <3>.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows <4>.creating reverse key indexes sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k sql> next 200k pctincrease 0 maxextents 50) tablespace indx; <5>.create bitmap index sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k sql> pctincrease 0 maxextents 50) tablespace indx; <6>.change storage parameter of index sql> alter index xay_id storage (next 400k maxextents 100); 7.allocating index space sql> alter index xay_id allocate extent(size 200k datafile \'c:/oracle/index.dbf\'); <8>.alter index xay_id deallocate unused; <9>、查看索引 SQL>select index_name,index_type,table_name from user_indexes order by table_name; <10>、查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper(\'&index_name\'); 11、创建序列 select * from user_sequences; create sequence SEQ_NAME start with 1000 maxvalue 1000 increment by 1; alter sequence SEQ_NAME minvalue 50 maxvalue 100; 12、删除重复行 update a set aa=null where aa is not null; delete from a where rowid!= (select max(rowid) from a b where a.aa=b.aa); 13、删除同其他表相同的行 delete from a where exits (select \'X\' from b where b.no=a.no); 或 delete from a where no in (select no from b); 14、查询从多少行到多少行的记录(可以用在web开发中的分页显示) select * from ( select rownum row_id,b.* from (select a.* from sys_oper a) b ) where row_id between 15 and 20 15、对公共授予访问权 grant select on 表名 to public; create public synonym 同义词名 for 表名; 16、填加注释 comment on table 表名 is \'注释\'; comment on column 表名.列名 is \'注释\'; 17、分布式数据库,创建数据库链路 create [public] database link LINKNAME [connect to USERNAME identified by PASSWORD] [using \'CONNECT_STRING\'] 可以在服务器端,也可以在客户端建立,但必须注意,两台服务器之间 数据库必须可以互访,必须各有各自的别名数据库 18、查看数据库链路 select * from all_db_links; select * from user_db_links; 查询 select * from TABLENAME@DBLNKNAME; 创建远程数据库同义词 create synonym for TABLENAME@DBLNKNAME; 操纵远程数据库记录 insert into TABLENAME@DBLNKNAME (a,b) values (va,vb); update TABLENAME@DBLNKNAME set a=\'this\'; delete from TABLENAME@DBLNKNAME; 怎样执行远程的内嵌过程 begin otherdbpro@to_html(参数); end; 19、数据库链路用户密码有特殊字符的时候,可以用双引号把密码引起来 create public database link dblink1 connect to db1 identified by \"123*456\" using \'db11\' 20.oracle8中扩充了group by rollup和cube的操作。有时候省了你好多功夫的。 <1>下面的语句可以进行总计 select region_code,count(*) from aicbs.acc_woff_notify group by rollup(region_code); <2> 对第1个字段小计,最后合计 select region_code,write_status,count(*) from aicbs.acc_woff_notify group by rollup(region_code,write_status); ---------------------- 570 0 3 570 1 2 570 5 --此处小计了570的记录 571 0 10 571 1 2 571 12 --此处小计了571的记录 ..... 100 --此处有总计 <3> 复合rollup表达式,只做总计 select region_code,write_status,count(*) from aicbs.acc_woff_notify group by rollup(region_code,write_status); <4> 对第1个字段小计,再对第2个字段小计,最后合计 select region_code,write_status,count(*) from aicbs.acc_woff_notify group by cube(region_code,write_status); ---------------------- 100 --此处有总计 0 60 --对write_status=0的小计 1 39 --对write_status=1的小计 3 1 --对write_status=3的小计 570 5 --此处小计了570的记录 570 0 3 570 1 2 571 12 --此处小计了571的记录 571 0 10 571 1 2 .... <3> 复合cube表达式,只做总计 select region_code,write_status,count(*) from aicbs.acc_woff_notify group by cube(region_code,write_status); <4>下面的语句可以按照rollup不同的字段进行小计 select region_code,write_status,count(*) from aicbs.acc_woff_notify group by region_code,rollup(write_status); 21.查询view的创建语句 sql>set long 1000 sql>select * from user_views where view_name=\'MY_VIEW_NAME\'; or sql>select * from all_views where view_name=\'MY_VIEW_NAME\'; 22、去除数据库中特殊字符 <1>.字符串字段中含有\"\'\",如果用来组合sql语句,会造成语句不准确。 比如:replace(f1,\'\'\'\',\'\') <2>.字符串字段中含有\"\\t \\n\",如果用来在c或者c++程序中输出到文件,格式无法保证。 比如:replace(f2,\'\\t\',\'\') <3>.清除换行和回车 比如: replace(f2,chr(13)||chr(10),\'\') 23、如何在字符串里加回车或者tab键 在sqlplus中执行 sql>select \'UserId=1233111\'||chr(10)||\'AccId=13431\'||chr(9)||\'AccId2=11111\' from dual; 24、树形查询 create table zj( bm number(8), bmmc varchar2(20), sjbm number(8) ) insert into zj values(1,\'aaa\',0) insert into zj values(11,\'aaa1\',1) insert into zj values(12,\'aaa2\',1) insert into zj values(111,\'aaa11\',11) insert into zj values(112,\'aaa12\',11) insert into zj values(113,\'aaa13\',11) insert into zj values(121,\'aaa21\',12) insert into zj values(122,\'aaa22\',12) insert into zj values(123,\'aaa23\',12) -- select bm,bmmc,sjbm,level from zj start with sjbm=0 connect by prior bm = sjbm 或者 select bm,bmmc,sjbm,level from zj start with sjbm=0 connect by sjbm = prior bm 25、快照 create snapshot SNAPSHOT_NAME [storage (storage parameter)] [tablespace TABLESPACE_NAME] [refresh [fast\\complete\\force] [start with START_DATE next NEXT_DATE] as QUERY; create snapshot snapshot_to_study as select * from TABLE_NAME@to_study; 创建角色 create role aa identified by aaa; 授权 grant create snapshot,alter snapshot to aaa; grant aaa to emp; create snapshot SNAPSHOT_TO_HTML refresh complete start with sysdate next sysdate+5/(24*60*60) as select * from a@to_html; 删除 drop snapshot snap_to_html 手工刷新快照,(调用DBMS_SNAPSHOT包中的refresh过程)DBMS_SNAPSHOT.refresh(snapshot_name,refresh_type); begin DBMS_SNAPSHOT.REFRESH(\'snap_to_html\',\'c\'); end; 对所有快照进行刷新 begin DBMS_SNAPSHOT.REFRESH_ALL; end; 怎样执行远程的内嵌过程 begin otherdbpro@to_html(参数); end; 26、用户管理 create a user: database authentication sql> create user juncky identified by oracle default tablespace users sql> temporary tablespace temp quota 10m on data password expire sql> [account lock|unlock] [profile profilename|default]; <1>.查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; <2>生成用户时指定缺省表空间 create user 用户名 identified by 口令 default tablespace 表空间名; <3>重新指定用户的缺省表空间 alter user 用户名 default tablespace 表空间名 <4>查看当前用户的角色 SQL>select * from user_role_privs; <5>查看当前用户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; <6>查看用户下所有的表 SQL>select * from user_tables; <7> alter user语句的quota子句限制用户的磁盘空间 如:alter user jf quota 10M on system; 27、查看放在ORACLE的内存区里的表 SQL>select table_name,cache from user_tables where instr(cache,\'Y\')>0; 28、约束条件 create table employee (empno number(10) primary key, name varchar2(40) not null, deptno number(2) default 10, salary number(7,2) check salary<10000, birth_date date, soc_see_num char(9) unique, foreign key(deptno) references dept.deptno) tablespace users; 关键字(primary key)必须是非空,表中记录的唯一性 not null 非空约束 default 缺省值约束 check 检查约束,使列的值符合一定的标准范围 unqiue 唯一性约束 foreign key 外部键约束 29、查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 SQL>select text from user_views where view_name=upper(\'&view_name\'); 30、查看同义词的名称 SQL>select * from user_synonyms; 31、用Sql语句实现查找一列中第N大值 select * from (select t.*,dense_rank() over (order by sal) rank from employee) where rank = N; 32 虚拟自段 <1>. CURRVAL 和 nextval 为表创建序列 CREATE SEQUENCE EMPSEQ ... ; SELECT empseq.currval FROM DUAL ; 自动插入序列的数值 INSERT INTO emp VALUES (empseq.nextval, \'LEWIS\', \'CLERK\', 7902, SYSDATE, 1200, NULL, 20) ; <2>. ROWNUM 按设定排序的行的序号 SELECT * FROM emp WHERE ROWNUM < 10 ; <3>. ROWID 返回行的物理地址 SELECT ROWID, ename FROM emp WHERE deptno = 20 ; 33、对CLOB字段进行全文检索 SELECT * FROM A WHERE dbms_lob.instr(a.a,\'K\',1,1)>0; 34. 特殊字符的插入,比如\"&\" insert into a values (translate (\'at{&}t\',\'at{}\',\'at\')); 35.表管理 <1>.create a table sql> create table table_name (column datatype,column datatype]....) sql> tablespace tablespace_name [pctfree integer] [pctused integer] sql> [initrans integer] [maxtrans integer] sql> storage(initial 200k next 200k pctincrease 0 maxextents 50) sql> [logging|nologging] [cache|nocache] <2>.copy an existing table sql> create table table_name [logging|nologging] as subquery <3> create table ... as 方式建表的时候,指定表参数 create table a storage( initial 1M /*第一次创建时分配空间*/ next 1M /*第一次分配的存储空间用完时在分配*/ ) as select * from b; <4>.创建临时表 sql> create global temporary table xay_temp as select * from xay; on commit preserve rows/on commit delete rows 在Oracle中,可以创建以下两种临时表: a 会话特有的临时表: create global temporary table () on commit preserve rows; 会话指定,当中断会话时ORACLE将截断表 b 事务特有的临时表: create global temporary table () on commit delete rows; 事务指定,每次提交后ORACLE将截断表(删除全部行) c 说明 临时表只在当前连接内有效   临时表不建立索引,所以如果数据量比较大或进行多次查询时,不推荐使用   数据处理比较复杂的时候时表快,反之视图快点   在仅仅查询数据的时候建议用游标: open cursor for \'sql clause\'; <5> pctfree = (average row size - initial row size) *100 /average row size pctused = 100-pctfree- (average row size*100/available data space) <6>.change storage and block utilization parameter sql> alter table table_name pctfree=30 pctused=50 storage(next 500k sql> minextents 2 maxextents 100); <7>.manually allocating extents sql> alter table table_name allocate extent(size 500k datafile \'c:/oracle/data.dbf\'); <8>.move tablespace sql> alter table employee move tablespace users; <9>.deallocate of unused space sql> alter table table_name deallocate unused [keep integer] <10>.drop a column sql> alter table table_name drop column comments cascade constraints checkpoint 1000; alter table table_name drop columns continue; <11>.mark a column as unused sql> alter table table_name set unused column comments cascade constraints; alter table table_name drop unused columns checkpoint 1000; alter table orders drop columns continue checkpoint 1000 data_dictionary : dba_unused_col_tabs 37. 中文是如何排序的? Oracle9i之前,中文是按照二进制编码进行排序的。 在oracle9i中新增了按照拼音、部首、笔画排序功能。设置NLS_SORT值 SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 SCHINESE_PINYIN_M 按照拼音排序 38. 数据表中的字段最大数: 表或视图中的最大列数为 1000 39. oracle中的裸设备: 裸设备就是绕过文件系统直接访问的储存空间 40. 在Oracle服务器上通过SQLPLUS查看本机IP地址 ? select sys_context(\'userenv\',\'ip_address\') from dual; 如果是登陆本机数据库,只能返回127.0.0.1 41. 在ORACLE中取毫秒? 9i之前不支持,9i开始有timestamp. 9i可以用select systimestamp from dual; 42. 将N秒转换为时分秒格式? set serverout on declare N number := 1000000; ret varchar2(100); begin ret := trunc(n/3600) || \'小时\' || to_char(to_date(mod(n,3600),\'sssss\'),\'fmmi\"分 \"ss\"秒\"\') ; dbms_output.put_line(ret); end; 43、在某个用户下找所有的索引 select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name from user_ind_columns, user_indexes where user_ind_columns.index_name = user_indexes.index_name and user_ind_columns.table_name = user_indexes.table_name order by user_indexes.table_type, user_indexes.table_name, user_indexes.index_name, column_position; 44. not in的替代。 一般not in的效率比较低。特别是数据量大的时候,几乎不能执行。 用下面几种方式可以替换写法 比如要查询在fee_rev_info表中已经销户的用户(不在cm_user中的)(不过下面的例子不是很好,因为bill_id是cm_user的唯一索引) select * from fee_rev_info where bill_id not in (select bill_id from cm_user) <1> 用not exists select * from fee_rev_info a where not exists (select \'p\' from cm_user b where b.bill_id = a.bill_id) <2> 用外连接(+) select a.* from fee_rev_info a,cm_user b where a.bill_id = b.bill_id (+) and b.bill_id is null <3> 用hash_aj select /*+HASH_AJ*/* from fee_rev_info where bill_id not in (select bill_id from cm_user) 45.怎么样查询特殊字符,如通配符%与_ 假如数据库中有表 STATIONTYPE,STATION_571 STATION_572 ... select * from tab where tname like \'STATION_%\' 会显示 STATIONTYPE,STATION_571 ... 可以用下面的语句 select * from tab where tname like \'STATION\\_%\' escape\'\\\' 46.如果存在就更新,不存在就插入可以用一个语句实现吗 9i已经支持了,是Merge,但是只支持select子查询, 如果是单条数据记录,可以写作select .... from dual的子查询。 语法为: MERGE INTO table USING data_source ON (condition) WHEN MATCHED THEN update_clause WHEN NOT MATCHED THEN insert_clause; 如 MERGE INTO cm_user_credit USING (select * from dual) ON (user_id =1302514690 ) when MATCHED then update set credit_value = 1000 when NOT MATCHED then insert (user_id,acc_id,bill_id,plan_id,region_code,credit_value) values(1302514690,1305032158,\'13857141218\',10070247,\'571\',1000); 47.怎么实现一条记录根据条件多表插入 9i以上可以通过Insert all语句完成,仅仅是一个语句,如: INSERT ALL WHEN (id=1) THEN INTO table_1 (id, name) values(id,name) WHEN (id=2) THEN INTO table_2 (id, name) values(id,name) ELSE INTO table_other (id, name) values(id, name) SELECT id,name FROM a; 如果没有条件的话,则完成每个表的插入,如 INSERT ALL INTO table_1 (id, name) values(id,name) INTO table_2 (id, name) values(id,name) INTO table_other (id, name) values(id, name) SELECT id,name FROM a; 48.如何实现行列转换 <1>、固定列数的行列转换 如 student subject grade --------------------------- student1 语文 80 student1 数学 70 student1 英语 60 student2 语文 90 student2 数学 80 student2 英语 100 ... 转换为 语文 数学 英语 student1 80 70 60 student2 90 80 100 ... 语句如下: select student,sum(decode(subject,\'语文\', grade,null)) \"语文\", sum(decode(subject,\'数学\', grade,null)) \"数学\", sum(decode(subject,\'英语\', grade,null)) \"英语\" from table group by student <2>、不定列行列转换 如 c1 c2 -------------- 1 我 1 是 1 谁 2 知 2 道 3 不 ... 转换为 1 我是谁 2 知道 3 不 这一类型的转换必须借助于PL/SQL来完成,这里给一个例子 CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER) RETURN VARCHAR2 IS Col_c2 VARCHAR2(4000); BEGIN FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP Col_c2 := Col_c2||cur.c2; END LOOP; Col_c2 := rtrim(Col_c2,1); RETURN Col_c2; END; / SQL> select distinct c1 ,get_c2(c1) cc2 from table;即可 --例子: create table okcai_1 ( user_id varchar2(10), user_number varchar2(10), user_num number(8) ) user_id user_number user_num --------------------- 1 123 2 1 456 5 1 789 6 2 11 2 2 22 3 2 33 4 2 44 5 2 55 6 2 66 7 2 77 8 3 1234 1 3 5678 2 方式一: create or replace function get_col( p_userId number, p_col number ) return varchar as v_tmp varchar2(255); begin select user_number||chr(9)||user_num into v_tmp from (select user_number,user_num,rownum row_id from okcai_1 where user_id = p_userId) a where row_id = p_col; return ltrim(v_tmp); --return v_tmp; end; 然后 select distinct user_id,get_col(user_id,1),get_col(user_id,2),get_col(user_id,3) .... from okcai_1 方式二: create or replace function get_col( p_userId number, p_col number ) return varchar as v_tmp varchar2(255); begin select user_number||chr(9)||user_num into v_tmp from (select user_number,user_num,rownum row_id from okcai_1 where user_id = p_userId) a where row_id = p_col; return ltrim(v_tmp); --return v_tmp; end; select distinct user_id,get_col_new(user_id) from okcai_1; 49.怎么设置存储过程的调用者权限 普通存储过程都是所有者权限,如果想设置调用者权限,请参考如下语句 create or replace procedure ...() AUTHID CURRENT_USER As begin ... end; 50.Oracle有哪些常见关键字 详细信息可以查看v$reserved_words视图 51.怎么查看数据库参数 <1> show parameter 参数名 如通过show parameter spfile可以查看9i是否使用spfile文件 其中参数名是可以匹配的。 比如show parameter cursor ,则会显示跟cursor相关的参数 <2> select * from v$parameter <3> 除了这部分参数,Oracle还有大量隐含参数,可以通过如下语句查看: SELECT NAME ,VALUE ,decode(isdefault, \'TRUE\',\'Y\',\'N\') as \"Default\" ,decode(ISEM,\'TRUE\',\'Y\',\'N\') as SesMod ,decode(ISYM,\'IMMEDIATE\', \'I\', \'DEFERRED\', \'D\', \'FALSE\', \'N\') as SysMod ,decode(IMOD,\'MODIFIED\',\'U\', \'SYS_MODIFIED\',\'S\',\'N\') as Modified ,decode(IADJ,\'TRUE\',\'Y\',\'N\') as Adjusted ,description FROM ( --GV$SYSTEM_PARAMETER SELECT x.inst_id as instance ,x.indx+1 ,ksppinm as NAME ,ksppity ,ksppstvl as VALUE ,ksppstdf as isdefault ,decode(bitand(ksppiflg/256,1),1,\'TRUE\',\'FALSE\') as ISEM ,decode(bitand(ksppiflg/65536,3), 1,\'IMMEDIATE\',2,\'DEFERRED\',\'FALSE\') as ISYM ,decode(bitand(ksppstvf,7),1,\'MODIFIED\',\'FALSE\') as IMOD ,decode(bitand(ksppstvf,2),2,\'TRUE\',\'FALSE\') as IADJ ,ksppdesc as DESCRIPTION FROM x$ksppi x ,x$ksppsv y WHERE x.indx = y.indx AND substr(ksppinm,1,1) = \'_\' AND x.inst_id = USERENV(\'Instance\') ) ORDER BY NAME 52.怎样建立基于函数索引 8i以上版本,确保 Query_rewrite_enabled=true Query_rewrite_integrity=trusted Compatible=8.1.0以上 Create index indexname on table (function(field)); 53.怎么样移动表或表分区 [A]移动表的语法 Alter table tablename move [Tablespace new_name Storage(initial 50M next 50M pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging] 移动分区的语法 alter table tablename move (partition partname) [update global indexes] 之后之后必须重建索引 Alter index indexname rebuild 如果表有Lob段,那么正常的Alter不能移动Lob段到别的表空间,而仅仅是移动了表段,可以采用如下的方法移动Lob段 alter table tablename move lob(lobsegname) store as (tablespace newts); 54.怎么样修改表的列名 [A]9i以上版本可以采用rname命令 ALTER TABLE UserName.TabName RENAME COLUMN SourceColumn TO DestColumn 9i以下版本可以采用create table …… as select * from SourceTable的方式。 另外,8i以上可以支持删除列了 ALTER TABLE UserName.TabName SET UNUSED (ColumnName) CASCADE CONSTRAINTS ALTER TABLE UserName.TabName DROP (ColumnName) CASCADE CONSTRAINTS 55.case的用法 在sql语句中 CASE test_value WHEN expression1 THEN value1 [[WHEN expression2 THEN value2] [...]] [ELSE default_value] END 比如1 SELECT last_name, job_id, salary CASE job_id WHEN \'IT_PROG\' THEN 1.10*salary WHEN \'ST_CLERK\' THEN 1.15*salary WHEN \'SA_REP\' THEN 1.20*salary ELSE salary END \"REVISED_SALARY\" FROM employees 比如2 select case when real_charge>=20000 and real_charge<30000 then 5000 when real_charge>=30000 and real_charge<40000 then 9000 when real_charge>=40000 and real_charge<50000 then 10000 when real_charge>=50000 and real_charge<60000 then 14000 when real_charge>=60000 and real_charge<70000 then 18000 when real_charge>=70000 and real_charge<80000 then 19000 when real_charge>=80000 and real_charge<90000 then 24000 when real_charge>=90000 and real_charge<100000 then 27000 when real_charge>=100000 and real_charge<110000 then 27000 when real_charge>=110000 and real_charge<120000 then 29000 when real_charge>=120000 then 36000 else 0 end ,acc_id,user_id,real_charge from okcai_jh_charge_200505 在存储过程中 case v_strGroupClassCode when \'1\' then v_nAttrNum := v_nAttrNum + 300; v_strAttrFlag := \'1\'||substr(v_strAttrFlag,2,7); when \'2\' then v_nAttrNum := v_nAttrNum + 200; v_strAttrFlag := \'2\'||substr(v_strAttrFlag,2,7); else NULL; end case; 注意的是存储过程和sql语句有的细微差别是用end case,而不是end。语句后面跟\";\"
******* 导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /*********** 导入Excel SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /*动态文件名 declare @fn varchar(20),@s varchar(1000) set @fn = 'c:\test.xls' set @s ='''Microsoft.Jet.OLEDB.4.0'', ''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0''' set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$' exec(@s) */ SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名 FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /********************** EXCEL导到远程SQL insert OPENDATASOURCE( 'SQLOLEDB', 'Data Source=远程ip;User ID=sa;Password=密码' ).库名.dbo.表名 (列名1,列名2) SELECT 列名1,列名2 FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions /** 导入文本文件 EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword' /** 导出文本文件 EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword' 或 EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword' 导出到TXT文本,用逗号分开 exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password' BULK INSERT 库名..表名 FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ';', ROWTERMINATOR = '\n' ) --/* dBase IV文件 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]') --*/ --/* dBase III文件 select * from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]') --*/ --/* FoxPro 数据库 select * from openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 'select * from [aa.DBF]') --*/ /**************导入DBF文件****************/ select * from openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver; SourceDB=e:\VFP98\data; SourceType=DBF', 'select * from customer where country != "USA" order by country') go /***************** 导出到DBF ***************/ 如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句 insert into openrowset('MSDASQL', 'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\', 'select * from [aa.DBF]') select * from 表 说明: SourceDB=c:\ 指定foxpro表所在的文件夹 aa.DBF 指定foxpro表的文件名. /*************导出到Access********************/ insert into openrowset('Microsoft.Jet.OLEDB.4.0', 'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表 /*************导入Access********************/ insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', 'x:\A.mdb';'admin';'',A表) 文件名为参数 declare @fname varchar(20) set @fname = 'd:\test.mdb' exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'', '''+@fname+''';''admin'';'''', topics) as a ') SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品 ********************* 导入 xml 文件 DECLARE @idoc int DECLARE @doc varchar(1000) --sample XML document SET @doc =' Customer was very satisfied Important Happy Customer. ' -- Create an internal representation of the XML document. EXEC sp_xml_preparedocument @idoc OUTPUT, @doc -- Execute a SELECT statement using OPENXML rowset provider. SELECT * FROM OPENXML (@idoc, '/root/Customer/Order', 1) WITH (oid char(5), amount float, comment ntext 'text()') EXEC sp_xml_removedocument @idoc ??????? /**********************Excel导到Txt****************************************/ 想用 select * into opendatasource(...) from opendatasource(...) 实现将一个Excel文件内容导入到一个文本文件 假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位) 且银行帐号导出到文本文件后分两部分,前8位和后8位分开。 邹健: 如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2 然后就可以用下面的语句进行插入 注意文件名和目录根据你的实际情况进行修改. insert into opendatasource('MICROSOFT.JET.OLEDB.4.0' ,'Text;HDR=Yes;DATABASE=C:\' )...[aa#txt] --,aa#txt) --*/ select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) from opendatasource('MICROSOFT.JET.OLEDB.4.0' ,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls' --,Sheet1$) )...[Sheet1$] 如果你想直接插入并生成文本文件,就要用bcp declare @sql varchar(8000),@tbname varchar(50) --首先将excel表内容导入到一个全局临时表 select @tbname='[##temp'+cast(newid() as varchar(40))+']' ,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8) into '+@tbname+' from opendatasource(''MICROSOFT.JET.OLEDB.4.0'' ,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'' )...[Sheet1$]' exec(@sql) --然后用bcp从全局临时表导出到文本文件 set @sql='bcp "'+@tbname+'" out "c:\aa.txt" /S"(local)" /P"" /c' exec master..xp_cmdshell @sql --删除临时表 exec('drop table '+@tbname) /********************导整个数据库*********************************************/ 用bcp实现的存储过程 /* 实现数据导入/导出的存储过程 根据不同的参数,可以实现导入/导出整个数据库/单个表 调用示例: --导出调用示例 ----导出单个表 exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1 ----导出整个数据库 exec file2table 'zj','','','xzkh_sa','C:\docman',1 --导入调用示例 ----导入单个表 exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0 ----导入整个数据库 exec file2table 'zj','','','xzkh_sa','C:\docman',0 */ if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1) drop procedure File2Table go create procedure File2Table @servername varchar(200) --服务器名 ,@username varchar(200) --用户名,如果用NT验证方式,则为空'' ,@password varchar(200) --密码 ,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表 ,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt ,@isout bit --1为导出,0为导入 as declare @sql varchar(8000) if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表 begin set @sql='bcp '+@tbname +case when @isout=1 then ' out ' else ' in ' end +' "'+@filename+'" /w' +' /S '+@servername +case when isnull(@username,'')='' then '' else ' /U '+@username end +' /P '+isnull(@password,'') exec master..xp_cmdshell @sql end else begin --导出整个数据库,定义游标,取出所有的用户表 declare @m_tbname varchar(250) if right(@filename,1)'\' set @filename=@filename+'\' set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U''' exec(@m_tbname) open #tb fetch next from #tb into @m_tbname while @@fetch_status=0 begin set @sql='bcp '+@tbname+'..'+@m_tbname +case when @isout=1 then ' out ' else ' in ' end +' "'+@filename+@m_tbname+'.txt " /w' +' /S '+@servername +case when isnull(@username,'')='' then '' else ' /U '+@username end +' /P '+isnull(@password,'') exec master..xp_cmdshell @sql fetch next from #tb into @m_tbname end close #tb deallocate #tb end go /************* Oracle **************/ EXEC sp_addlinkedserver 'OracleSvr', 'Oracle 7.3', 'MSDAORA', 'ORCLDB' GO delete from openquery(mailser,'select * from yulin') select * from openquery(mailser,'select * from yulin') update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888 insert into openquery(mailser,'select disorder,catago from yulin')values(333,777) 补充: 对于用bcp导出,是没有字段名的. 用openrowset导出,需要事先建好表. 用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入
本系列课程分为,0-理论知识部分    0.1-oca_ocp_ocm相关知识内容(uploading)1-安装部分     1.1单实例命令行安装     1.2单实例图形安装     1.3rac安装     1.4rac(pdb架构)+dg 单实例安装(用rman的duplicate和rman备份2种方式搭建dg)     1.5rac(pdb架构)+rac dg2-迁移部分    2.1单实例之间的迁移    2.2单实迁移到rac    2.3rac迁移到单实例    2.4rac和rac之间的迁移。    2.5关于xtts的迁移方法的使用3-恢复部分   3.1单实例本地恢复   3.2rac本地恢复4-数据库升级部分   4.1 19.3升级到19.13   4.2 12.1.0.2升级到19.3   4.3 12.2.0.1升级到19.3   4.4 19.3的rac升级到19.135-数据库优化部分    5.1如何看懂执行计划    5.2 hash, nest loop,  merge的执行计划各自适用于那种场景?    5.3为什么要用直方图,19c的直方图有frency, balance,  top-frenkency, hybrid?允许最大的bucket是多少?6-数据库asm磁盘操作部分   6-1如何用一条命令迁移rac存储。   6-2如何用笨方法迁移rac存储。   6-3目前asm磁盘是external冗余级别,如何修改为normal的冗余级别。7-数据库工具部分   7.1oem如何进行安装,如何进行纳管数据库,如何使用   7.2如何用oem监控数据库 8-综合实战。   a库是11.2.0.3的单实例数据库,容量有20T。   b库是19.13的rac环境的pdb数据库,容量只有21T.   如何把a库的数据迁移到b库的pdb数据库?   这个综合实战非常考验大家,基本上囊括了数据库复制安装,数据库dg,数据库升级的方方面面。   大家可以自己先想想怎么实现。一课程主题手把手带大家进行实操,在实操中提升自己手把手带大家学习orace 19的ocm课程,学完本课程,至少具有3-5年oracle数据库水平。文档和视频is uploading. 二课程特色 学oracle,找阿伟阿伟出品,必属精品从实战出发,贴近实战,自己实战,实战为王,在实战中提升自己授人以鱼不如授人以渔通过此系列课程可以提高3-5年oracle水平交个朋友,物有所值,诚意满满走心课程,把自己在运维中的坑,提炼知识后,实战给大家 三课程内容 0.理论知识部分(上传中。。。)   0.1数据库监听(动态监听,静态监听,多个ip同时监听1521,一个ip监听多个service_name)   0.2rman 命令中的set rename datafile和 alter database  rename datafile 有啥区别?   0.3    ............1.数据库单实例安装  1.0 安装检查    1.0.1安装包检查    1.0.2修改系统参数    1.0.3数据库用户创建    1.0.4创建目录    1.0.5上传安装软件包    1.0.6修改oracle用户环境变量  1.1 rhel7系统图形安装oracle 19c单实例数据库  1.2 rhel7系统命令行安装       1.2.0命令行安装数据库软件       1.2.1命令行创建non cdb数据库实例       1.2.2命令行创建 cdb数据库实例2.rac数据库安装    1.课程结束成果演示          1.1 用workstation,安装一套rhel7+oracle19c+rac+multipath+共享存储+DNS服务器+DNS客户端+NTP服务器+NTP客户端的生产环境          1.2 怎样打oracle19c的rac补丁(包括GI补丁,oracle补丁,数据库补丁,OJVM补丁,bug补丁)     2.安装openfiler软件,模拟共享存储+配置多路径访问       2.1安装openfiler软件       2.2配置openfiler软件(配置2个虚拟网卡,模拟服务器的2个HBA卡)        2.3创建ocr磁盘       2.4创建mgmt磁盘       2.5创建数据文件磁盘       2.6创建归档日志磁盘     3.安装2台数据库服务器       3.1安装2台数据库服务器RHEL7.5       3.2配置服务器双网卡绑定+配置服务器心跳线     4.安装多路径软件识别共享存储中的磁盘        4.1安装服务器本地yum源        4.2安装iscsi软件,配置多路径配置文件,识别共享存储中的磁盘        4.3识别ocr磁盘        4.4识别mgmt磁盘        4.5识别数据文件磁盘        4.6识别归档日志磁盘     5.oracle19c的rac环境系统参数官方说明        5.1如何配置oracle19c的rac的系统参数(我们参考官方说明)        5.2oracle19c+rac环境Best Practices 官方说明文档     6.安装oracle19c+rac之前的准备工作        6.1修改/etc/hosts文件        6.2配置DNS服务器+DNS客户端+NTP服务器+NTP客户端        6.3创建用户和组        6.4创建目录        6.5修改用户环境变量        6.6安装相关软件包        6.7配置ssh互信        6.9禁用服务器透明大页     7.安装oracle+19c+rac软件       7.1安装GI软件       7.2创建ASM磁盘,主要是数据文件磁盘和归档日志磁盘       7.3安装数据库软件       7.4创建数据库实例       7.5日常常用维护集群命令(启停数据库,启停集群,查看监听,教同学们怎样不死记命令,而且命令还正确)     8.打补丁     8.1打GI和ORACLE的操作系统补丁      8.2打OJVM补丁      8.3打ORA600的bug补丁     9.课程总结和成果演示     9.1课程总结和成果演示3.rac+dg(单实例)数据库安装(pdb架构)     3.1.1dg知识点讲解     3.1.2配置dg监听,密码文件,参数文件。     3.1.2通过rman的duplicate命令进行dg搭建1。     3.1.3通过rman的duplicate命令进行dg搭建2     3.1.4进行数据库切换需要的配置。     3.1.5数据库正常switch over     3.1.6数据库如何fail over     3.1.7dg库failover以后通过闪回快速恢复dg     3.1.8dg库failover以后通过新主库的控制文件快速恢复dg     3.1.9备库归档缺失如何进行解决。     3.1.10recover database和recover standby database是否可以在dg中使用?     3.1.11如何通过rman的备份进行搭建dg。     3.1.12dg库使用静态监听无法监听pdb数据库的service问题如何进行解决?   4.rac+rac dg的实战步骤(pdb架构)(上传中。。。)5.19c单实例数据库通过rman备份进行异机迁移到单实例数据库     5.1通过备份脚本进行数据,归档,控制文件备份     5.2通过备份脚本进行归档,控制文件备份       (注意源库备份目录是/backup/db和/backup/ar)     5.3传输备份文件到目标库        (传输备份文件到目标库的/home/oracle/bk目录)     5.4利用参数文件启动数据库到nomount     5.5利用备份集恢复控制文件,并启动数据库到mount     5.6通过restore database恢复数据库        5.6.1注册目标库备份集到控制文件        5.6.2启动数据库到mount状态,确定recover database的序列号     5.7recover database        5.7.1通过rman 进行recover database        5.7.2通过sql 命令行进行 recover database;     5.8.打开数据库          5.8.1解决打开数据库后,sys用户无法远程监听登录问题          5.8.2修改数据库动态参数启动数据库     5.9.备份的扩展             5.9.1如何知道备份集里面有哪些归档             5.9.2如何从这些备份集中提取归档             5.9.3进行异机数据库迁移时,如何逐步应用归档,并且如何open read only数据库后,继续应用归档             5.9.4为何要进行 open read only进行提前打开验证。               5.10.rman迁移备份的补充             5.10.1如何再rman中设置数据文件,在线日志生成路径。               类似如下命令                    run  6单实例数据库无数据丢失通过rman备份异机迁移到rac数据库和rac数据库通过rman迁移到rac数据库      6.1单实例源库进行数据库升级           19.3的源库升级到19.13版本(包括打数据库补丁和ojvm补丁)      6.2.传输备份文件到目标库           传输备份文件到目标库的/home/oracle/bk目录     6.3.利用参数文件启动数据库到nomount     6.4.利用备份集恢复控制文件,并启动数据库到mount        6.5.通过restore database恢复数据库           注册目标库备份集到控制文件           启动数据库到mount状态,确定recover database的序列号     6.6.recover database          通过rman 进行recover database          通过sql 命令行进行 recover database;     6.7.单实例数据库恢复完成后,配置为rac数据库           注册数据库到集群          修改数据库参数文件到asm     6.8.迁移rac数据库到rac数据库。           单实例数据库异机迁移到rac和,rac数据库异机迁移到rac有啥不一样。           根据上面理论,实施rac数据库异机恢复到rac7数据库本地恢复系列     7.1单实例数据库本地恢复     7.2rac数据库本地恢复8综合实战(uploading)     7.1实战课题:        有一台11.2.0.3的单实例数据库A,数据库容量有20T,无备份。        如何迁移到新搭建的rac环境B(数据库版本是19.13),并且是迁移到rac的pdb数据库中,并且rac数据库的asm容量只有21T.        这次实战包含的知识点。        1-如何在环境B复制数据库A的软件,最好进行复制,因为数据库A的11.2.0.3打了很多补丁,如果安装11.2.0.3软件,会造成版本不一致。        2-如何搭建11.2.0.3的单实例dg。        3-dg归档缺失如何解决。        4-如何升级11.2.0.3单实例到11.2.0.4单实例        5-如何升级11.2.0.4单实例到19.3单实例        6-如何升级19.3单实例到19.13单实例。        7-如何迁移19.13单实例数据库到19.13的rac的pdb数据库中。9数据库升级系列     8.1 单实例19c数据库升级到19.13版本。     8.2 单实例12.2.0.1数据库升级到19.13版本。     8.3 单实例12.1.0.2数据库升级到19.13版本。     8.4 19c数据库rac升级到19.13版本。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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