SQL基本语句小结
1
、显示一个表中字段
desc
表名(看表结构)
2
.删表中的字段
Alter table
表
drop (
字段名
)
3
.增加表中的字段
Alter table
表
add(
字段
类型
)
2
、得到所有表或视图
select * from tab
3
、连接用户
conn
用户
/
密码
grant dba to
用户
4
、排序
order by
字段
desc
(
asc
)
5
、数据库中所有表都有个隐藏的序列编号
rowid
6
、导出、导入
导出:
exp
用户
/
密码
tables=(
表
1
,表
2
,
..) file=
导出表
.dmp
exp
用户
/
密码
full=y(N) filell=
导出表
.dmp
导入:
imp
用户
/
密码
full=y(N) filell=
导出表
.dmp
7
、多条记录只取一个
select Distinct
字段
from table group by ….
8
、创建序列
Create sequence test start with 1 increment by 1 nomaxvalue nocycle cache 10
Exp: insert into table (..)values(
序列名
.nextval)
CREATE SEQUENCE "Y_CY3"."SKFAID" INCREMENT BY 1 START WITH 1
MAXVALUE 1.0E28 MINVALUE 1 NOCYCLE
CACHE 20 ORDER
Select
序列名
.nextval from dual
下一条序列值
Select
序列名
.currval from dual
序列当前值
9
删除用户对应的表:
drop user
用户名
cascade
10
、月加一,并按格式显示
TO_CHAR(add_months(JDRQ,jdxyzq-1),'yyyy-mm')
11
、系统时间
SELECT TO_CHAR(SYSDATE,'YYYY-mm') FROM DUAL
12
、相同记录显示固定的行
select * from table_name where rownum<N
13
、视图中查询条件是由程序传递的。要想用这个条件更新视图,可以创建一个表,这个表一个字段存放程序传递的参数,而这个表中的这个字段要由这个视图创建的表建立条件关联,当这个字段改变时,视图就回自动发生改变。所以根据程序参数查询视图时,先把参数保存到这个与视图关联条件的参数表中的对应的字段中,之后就可查询你要的视图数据了
14
、在我的机器上安装了一个
oracle 9
数据库服务器,其中还有一个
orace
数据库(只有读数据的权限,用户:
cy7
),我如何在我本地机器上创建一个视图来直接访问那台(不是本机的)数据库中
cy7
中的表或视图。
先建一个到另一数据库的连接
:
create database link link_name
connect to cy7 identified by
密码
using '
连接串
'
然后在本地
:
create or replace view view_name as
select * from
表名
@link_name <---
这里的表名是
cy7
的表名
15
、在
sql
中设置多少条记录显示一个字段名称
Set pagesize 100;
16
、把
sql
中的查询数据导入到文本中
Spool c:/qqq.txt
….
查询语句
Spool off
Q1.
怎样创建表?
A.
CREATE TABLE TABLE_NAME(
COLUMN1_NAME NUMBER(5) PRIMARY KEY,
COLUMN2_NAME CHAR(10) NOT NULL,
COLUMN3_NAME DATE DEFAULT(SYSDATE),
COLUMN4_NAME NUMBER(7,2) CHECK COLUMN4_NAME<CHECKVALUES,
COLUNM5_NAME NUMBER(3) CHECK(COLUMN5_NAME IN(‘FIRST_VALUES’,’SECOND_VALUES’,……’LAST_VALUES’)),
FOREIGN KEY(COLUMN_NAME) REFERENCE PARENT_TABLE_NAME.COLUMN_NAME)
PCTFREE 10
PCTUSED 40
TABLESPACE USERS
STORAGE(
INITIAL 50K
NEXT 50K
MAXEXTENTS 10
PCTINCREASE 25);
Q2.
怎样删除表?
DROP TABLE TABLE_NAME;
Q3.
怎样创建视图?
CREATE OR REPLACE VIEW VIEW_NAME AS SQLSTR;
Create view
视图名
as select
要显示各个表要显示字段名
from
表
1
,表
2… where
条件
Q4.
怎样删除视图?
. DROP VIEW VIEW_NAME;
Q5.
怎样给表添加字段?
ALTER TABLE TABLE_NAME ADD COLUMN_NAEM CHAR(12);
ALTER TABLE TABLE_NAME ADD (COLUMN1_NAME CHAR(12),COLUMN2_NAME NUMBER);
Q6.
怎样删除表中某个字段?
ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME;
ALTER TABLE TABLE_NAME DROP (COLUMN1_NAME ,COLUMN2_NAME);
Q7.
怎样给某个字段添加约束?
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME NOT NULL;
Q8.
怎样去除某个字段上的约束?
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME NULL;
Q9.
怎样给表加上主键?
ALTER TABLE TABLE_NAME ADD CONSTRAINT PRIMARYKEY_NAME PRIMARY KEY (COLUMN_NAME);
Q10.
怎样删除表的主键?
ALTER TABLE TABLE_NAME DROP CONSTRAINT PRIMARYKEY_NAME CASCADE;
Q11.
怎样给表添加一个外键?
ALTER TABLE TABLE1_NAME ADD CONSTRAINT FOREIGNKEY_NAME FOREIGN KEY (COLUMN_NAME) REFERENCES TABLE2_NAME (COLUMN_NAME) ON DELETE CASCADE;
Q12.
怎样删除表的一个外键?
ALTER TABLE TABLE_NAME DROP CONSTRAINT FOREIGNKEY_NAME;
Q13.
怎样给字段加上
CHECK
?
ALTER TABLE TABLE_NAME ADD CONSTRAINT CHECK_NAME CHECK COLUMN_NAME<10;
ALTER TABLE TABLE_NAME ADD CONSTRAINT CHECK_NAME CHECK(COLUMN_NAME IN(‘X’,’Y’));
Q14.
怎样去掉字段上的
CHECK
?
ALTER TABLE TABLE_NAME DROP CONSTRAINT CHECK_NAME;
Q15.
怎样给字段设置默认值?
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DEFAULT 'DEFAULT_VALUE';
Q16.
怎样移去字段的默认值?
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DEFAULT NULL;
Q17.
怎样创建索引?
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME (COLUMN_NAME);
Q18.
怎样删除索引?
DROP INDEX INDEX_NAME;
Q19.
怎样创建用户?
CREATE USER USER_NAME IDENTIFIED BY USER_PASSWORD
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT;
Q20.
怎样删除用户?
DROP USER USER_NAME CASCADE;
Q21.
怎样将权限
( privileges)
授予用户?
A.
GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON TABLE_NAME TO USER_NAME;
B.
GRANT INSERT(COLUMN1_NAME,COLUMN2_NAME) ON TABLE_NAME TO USER_NAME;
C.
GRANT ALL ON TABLE_NAME TO USER_NAME;
D.
GRANT CONNECT ,RESOURCE,DBA TO USER_NAME;
E.
GRANT ROLE_NAME(PRIVILEGE_NAME) TO USER_NAME WITH ADMIN OPTION;
Q22.
怎样从用户收回对象权限?
A.
REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON TABLE_NAME FROM USER_NAME;
B.
REVOLE CONNECT,RESOURCE,DBA FROM USER_NAME;
Q23.
怎样更登陆改用户密码?
A .PASSWORD
Q24.
怎样更改未登陆用户密码?
A. PASSWORD USER_NAME
Q25.
怎样更改表名?
A. RENAME OLD_TABLE_NAME TO NEW_TABLE_NAME
Q26.
怎样创建数据库连接?
A.
CREATE PUBLIC DATABASE LINK LINK_NAME
CONNECT TO USER_NAME IDENTIFIED BY USER_PASSWORD
USING’SEVER_NAME’
Q27.
怎样创建序列?
A. CREATE SEQUENCE SEQUENCE_NAME
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 10
ORDER;
Q28.
怎样删除序列?
A. DROP SEQUENCE SEQUENCE_NAME;
Q29.
怎样获取序列值?
A. SELECT SEQUENCE_NAME FROM DUAL;
Q30.
怎样创建角色?
A. CREATE ROLE ROLE_NAME;
Q31.
怎样删除角色?
A. DROP ROLE ROLE_NAME;
Q32.
怎样将权限
( privileges)
授予角色?
A.
GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON TABLE_NAMEE TO ROLE_NAME;
B.
GRANT CREATE TABLE TO ROLE_NAME;
Q33.
怎样从角色收回权限?
A.
REVOKE SELECT, INSERT, UPDATE, DELETE, ALTER ON TABLE_NAME FROM ROLE_NAME;
B.
REVOKE CREATE TABLE FROM ROLE_NAME;
Q34.
怎样将角色权限(
role privileges
)授予角色?
A. GRANT DBA TO ROLE_NAME;
Q35.
怎样从角色收回角色权限?
A. REVOKE DBA FROM ROLE_NAME;
Q36.
怎样连到远程数据库?
A. CONN USER_NAME/USER_PASSWORD@SERVER_NAME;
Q37.
怎样直接查看远程表的内容?
A. SELECT * FROM TABLE_NAME@LINK_NAME;
Q38.
不等于条件有哪几种写法?
A.
!=;
B.
^=;
C.
<>;
Q39.like
子句的用法?
A.
LIKE '%Y%';’
包含字母
Y
的;
B.
LIKE’Y%’;’
以字母
Y
打头的;
C.
LIKE’-----’;’有五个字母的
D.
LIKE’[c-jC-J]’;’首字母在c-j或C-J范围内的;
E.
LIKE’[^c-jC-J]’;首字母不在范围内的;
Q40.
用
TRUNCATE
函数清除表中全部记录?
A. TRUNCATE TABLE TABLE_NAME
Q41.Oracle
常用字符串处理函数有哪些?
A. ||
连接两个字符串;
LENGTH
字符串长度;
TRIM/LTRIM/RTRIM
截断串左(右)指定字符串(包括空串);
LOWER/UPPER
将字符串转换为小
/
大写,等等。
例如:
SELECT COLUMN1_NAME||'--'||COLUMN2_NAME||'YES' FROM TABLE_NAME;;
Q42.Oracle
支持哪些数字处理函数?
A. Oracle
支持所有常用数字函数,包括(但不限于)
+
、
-
、
*
、
/
、
ABS
、
COS
、
EXP
、
LN
、
LOG
、
MOD
、
POWER
、
ROUND
、
SIN
、
SINH
、
SQRT
、
TAN
、
TRUNC
、
AVG
、
COUNT
、
MAX
、
MIN
、
SUM
、
GREATEST
、
LEAST
等等。
例如:
SELECT GREATEST(3, 4, 5)*4 FROM DUAL;
SELECT POWER(2,3) FROM DUAL;
Q43.
怎样取得数据库服务器当前日期、时间?
A. SELECT SYSDATE FROM DUAL;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
Q44.
怎样将字符串转换为日期、时间格式?
A. SELECT TO_DATE('2002-11-27', 'YYYY-MM-DD') FROM DUAL;
SELECT TO_DATE('2002-11-27 09:28:55', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
Q45.
常用日期函数有哪些?
A. NEXT_DAY LAST_DAY ADD_MONTHS MONTHS_BETWEEN
等等。
例如:
SELECT LAST_DAY(SYSDATE) FROM DUAL;
Q46.DECODE
函数的用法?
A. DECODE
函数的格式为
DECODE(value, if1, then1, if2, then2...,else)
。假设表
TABLE_NAME
中有如下数据:
ID NAME ORDER
--------------------------------------
1 royal 1
2 bill 2
3 joy 1
--------------------------------------
1 royal 1
2 bill 2
3 joy 1
请观察如下
SQL
语句输出结果。
SELECT DECODE(NAME, 'royal', 'royaltest', 'bill', 'billgates', NAME) AS DC FROM TABLE_NAME;
DC
---------
royaltest
billgates
joy
SELECT DECODE(NAME, 'royal', 'royaltest', 'bill', 'billgates', NAME) AS DC FROM TABLE_NAME;
DC
---------
royaltest
billgates
joy
Q48.Oracle 有哪些常用数据字典?
A. USER_TABLES(TABS)
、
USER_TAB_COLUMNS(COLS)
、
USER_VIEWS
、
USER_SEQUENCES(SEQ)
、
USER_CONSTRAINTS
、
USER_CONS_COLUMNS
、
USER_TAB_COMMENTS
、
USER_COL_COMMENTS
、
USER_INDEXES(IND)
、
USER_IND_COLUMNS
、
USER_USERS
、
DBA_USERS
、
ALL_USERS
、
USER_TABLESPACES
等等。
例如:
SELECT * FROM USER_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FOREIGN_KEY';
Q49.
怎样将日期、时间插入
date
型字段中?
A. INSERT INTO TABLE_NAME (RM_INT_FIELD, RM_STR_FIELD, RM_DATE_FIELD) VALUES (9, 'Y', TO_DATE('2002-05-23', 'YYYY-MM-DD'));
INSERT INTO TALBE_NAME (INT_COLUMN, STR_COLUMN, DATE_COLUMN) VALUES (10, 'Y', TO_DATE('2002-10-10 8:23:33', 'YYYY-MM-DD HH:MI:SS'));
Q50.
怎样使用下
connect by
?
A. connect by
子句提供了遍历
“
树
”
的手段。
假设有这样一个表:
CREATE TABLE TABLE_NAME (ID INTEGER, PARENT_ID INTEGER, NAME VARCHAR2(32));
表中有如下数据:
ID PARENT_ID NAME
-----------------
2 1 AAA
3 1 BBB
4 2 CCC
5 2 DDD
6 4 EEE
8 7 GGG
ID PARENT_ID NAME
-----------------
2 1 AAA
3 1 BBB
4 2 CCC
5 2 DDD
6 4 EEE
8 7 GGG
假如我们现在需要从
NAME = 'EEE'
的记录开始,向上查找所有有父子关系的记录,可执行如下
SQL
语句:
SELECT * FROM ROYAL_TREETABLE START WITH NAME = 'EEE' CONNECT BY ID = PRIOR PARENT_ID;
ID PARENT_ID NAME
-----------------
6 4 EEE
4 2 CCC
2 1 AAA
ID PARENT_ID NAME
-----------------
6 4 EEE
4 2 CCC
2 1 AAA
Q51
怎样删除表中重复列?
A.
DELETE FROM A A WHERE A.ROWID!=(SELECT MAX(ROWID) FROM A B WHERE A.COLUMN1=B.COLUMN1 AND …A.COLUMNn=B.COLUMNn);
Q52
怎样从一表中删除在另一表中存在的记录?
A.
DELETE FROM A WHRE EXISTS(SELECT FROM B WHERE A.COLUMN=B.COLUMN);
B.
DELETE FROM AWHERE A.COLUMN IN(SELECT B.COLUMN FROM B);’
记录超过十万
,
极慢
.
Q53
怎样查找一表中有而另一表中没有的记录?
A.
SELECT * FROM A WHERE NOT EXISTS(SELECT * FROM B WHERE A.COLUMN=B.COLUMN);
B.
SELECT * FROM A WHERE A.COLUMN NOT IN(SELECT * FROM A INTERSET SELECT * FROM B);
数字函数
value1/value2
求两个数的商
ABS(value)
求这个数的绝对值
NVL(value,substitute)将数值为null的value字段值由substitute所制定的值替换
CEIL(value)求最小的大于等于这个数值的整数值
COS(value)求一个数的余弦数值
COSH(value)由一个数的双曲余弦数值
EXP(value) 求e的以value这个数为指数的幂
FLOOR(value)求最大的小于等于这个数的整数值
LN(vlaue)求这个数的自然对数值
LOG(value,value)求这个数的常数对数值
MOD(value,divisor)
求两个数的余数
POWER(value,exponent)求value的exponent次指数幂
ROUND(value,precision)将value值四舍五入到precision制定的精度
SIGN(value)取该是的符号,此数为正数时取回正号,显示“+”;为负时取回负号“-”
SIN(value)求这个数的正弦函数值
SINH(value)求这个数的双曲正弦函数值
SQRT(value)求这个数的平方根
TAN(value)求这个数的正切函数值
TANH(value)求这个数的双曲正切函数值
TEUNC(value,precsion)将value的值取得precsion制定位数的精度
Select avg(nvl(wages,0)) form wmployee
日期函数
ADD_MONTHS(DATE,COUNT)
对该日期增加几个月。增加数由
count
给出
GREATEST(date1,date2,….)
从一连串日期列表中找到最近的一个月
LAST_DAY(day)
返回日期值所在的月的最后一天
MONTH_BETWEEN(date2,date1)
在两个如期之间的相隔天数
NEXT_DAY(DATE,’day’)
返回制定日期的所有在星期的某一日的日期,
“
day
”代表星期:
Friday
TO_CHAR(date,’format’)
根据日期格式描述符重新设定日期格式
TO_DATE(srting,’format’)
将一个串转换为给定格式的日期
聚组函数
avg(value)
计算该组数的平均值
count(value)
max(value)
min(value)
stddev(value)
sum(value)
variance(value)
8. CHR()
的反函數是?
ASCII()
SELECT CHAR(65) FROM DUAL;
SELECT ASCII('A') FROM DUAL;
89.
字符串的連接
SELECT CONCAT(COL1,COL2) FROM TABLE ;
SELECT COL1||COL2 FROM TABLE ;
90.
怎么把select出来的结果导到一个文本文件中?
SQL>SPOOL C:/ABCD.TXT;
SQL>select * from table;
SQL >spool off;
91.
怎样估算SQL执行的I/O数 ?
SQL>SET AUTOTRACE ON ;
SQL>SELECT * FROM TABLE;
OR
SQL>SELECT * FROM
v$filestat ;
可以查看IO数
92.
如何在sqlplus下改变字段大小?
alter table table_name modify (field_name varchar2(100));
改大行,改小不行(除非都是空的)
93.
如何查询某天的数据?
select * from table_name where trunc(
日期字段)=to_date('2003-05-02','yyyy-mm-dd');
94. sql
语句如何插入全年日期?
create table BSYEAR (d date);
insert into BSYEAR
select to_date('20030101','yyyymmdd')+rownum-1
from all_objects
where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd');
insert into BSYEAR
select to_date('20030101','yyyymmdd')+rownum-1
from all_objects
where rownum <= to_char(to_date('20031231','yyyymmdd'),'ddd');
95.
如果修改表名?
alter table old_table_name rename to new_table_name;
96.
如何取得命令的返回状态值?
sqlcode=0
97.
如何知道用户拥有的权限?
SELECT * FROM
dba_sys_privs ;
98.
从网上下载的ORACLE9I与市场上卖的标准版有什么区别?
从功能上说没有区别,只不过oracle公司有明文规定;从网站上下载的oracle产品不得用于 商业用途,否则侵权。
99.
怎样判断数据库是运行在归档模式下还是运行在非归档模式下?
进入dbastudio,历程--〉数据库---〉归档查看。
100.
sql>startup pfile
和ifile,spfiled有什么区别?
pfile
就是Oracle传统的初始化参数文件,文本格式的。
ifile 类似于c语言里的include,用于把另一个文件引入
spfile 是9i里新增的并且是默认的参数文件,二进制格式
startup 后应该只可接pfile
ifile 类似于c语言里的include,用于把另一个文件引入
spfile 是9i里新增的并且是默认的参数文件,二进制格式
startup 后应该只可接pfile
101.
如何搜索出前N条记录?
SELECT * FROM empLOYEE WHERE ROWNUM < n
ORDER BY empno;
ORDER BY empno;
102.
如何知道机器上的Oracle支持多少并发用户数?
SQL>conn internal ;
SQL>show parameter processes ;
SQL>show parameter processes ;
104.
如何统计两个表的记录总数?
select (select count(id) from aa)+(select count(id) from bb)
总数 from dual;
105.
怎样用Sql语句实现查找一列中第N大值?
select * from
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;
(select t.*,dense_rank() over (order by sal) rank from employee)
where rank = N;
106.
如何在给现有的日期加上2年?(
select add_months(sysdate,24) from dual;
111.
返回大于等于N的最小整數值?
SELECT CEIL(N) FROM DUAL;
112.
返回小于等于N的最小整數值?
SELECT FLOOR(N) FROM DUAL;
113.
返回當前月的最后一天?
SELECT LAST_DAY(SYSDATE) FROM DUAL;
114.
如何不同用戶間數據導入?
IMP SYSTEM/MANAGER FILE=AA.DMP FROMUSER=USER_OLD TOUSER=USER_NEW ROWS=Y INDEXES=Y ;
115.
如何找数据库表的主键字段的名称?
SQL>SELECT * FROM user_constraints WHERE CONSTRAINT_TYPE='P' and table_name='TABLE_NAME';
116.
兩個結果集互加的函數?
SQL>SELECT * FROM BSEMPMS_OLD INTERSECT SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD UNION ALL SELECT * FROM BSEMPMS_NEW;
117.
兩個結果集互減的函數?
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;
SQL>SELECT * FROM BSEMPMS_OLD MINUS SELECT * FROM BSEMPMS_NEW;
118.
如何配置Sequence?
建sequence seq_custid
create sequence seq_custid start 1 incrememt by 1;
建表时:
create table cust
{ cust_id smallint not null,
...}
insert 时:
insert into table cust
values( seq_cust.nextval, ...)
create sequence seq_custid start 1 incrememt by 1;
建表时:
create table cust
{ cust_id smallint not null,
...}
insert 时:
insert into table cust
values( seq_cust.nextval, ...)
日期的各部分的常用的的寫法
119>.
取時間點的年份的寫法:
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL;
120>.
取時間點的月份的寫法:
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;
121>.
取時間點的日的寫法:
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;
122>.
取時間點的時的寫法:
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL;
123>.
取時間點的分的寫法:
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL;
124>.
取時間點的秒的寫法:
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL;
125>.
取時間點的日期的寫法:
SELECT TRUNC(SYSDATE) FROM DUAL;
SELECT TRUNC(SYSDATE) FROM DUAL;
126>.
取時間點的時間的寫法:
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'HH24:MI:SS') FROM DUAL;
127>.
日期,時間形態變為字符形態
SELECT TO_CHAR(SYSDATE) FROM DUAL;
SELECT TO_CHAR(SYSDATE) FROM DUAL;
128>.
將字符串轉換成日期或時間形態:
SELECT TO_DATE('2003/08/01') FROM DUAL;
SELECT TO_DATE('2003/08/01') FROM DUAL;
129>.
返回參數的星期几的寫法:
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;
130>.
返回參數一年中的第几天的寫法:
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
131>.
返回午夜和參數中指定的時間值之間的秒數的寫法:
SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'SSSSS') FROM DUAL;
132>.
返回參數中一年的第几周的寫法:
SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'WW') FROM DUAL;
133
备份数据
1、
Oracle 8.1.6 For NT
移植
初步设想也通过 Oracle 8.0.5 进行过度。因其版本比 Oracle 8.0.5 高、下面对参考的规则进行一些校验。
3 . 1 高版本的 Export 导出来的转储文件,低版本的 Import 读不了
在 Oracle 8.1.6 数据库服务器导出转储二进制文件: ora816.dmp 。
在 Oracle 8.0.5 数据库服务器上用 Imp80 进行导入。
D:>Imp80 house/password file=d:/ ora816.dmp log=d:/ora816.log full=y
/* 日志显示 */
已连接到: Oracle8 Release 8.0.5.0.0 – Production
PL/SQL Release 8.0.5.0.0 – Production
IMP-00010: 不是有效的导出文件,标题检验失败
IMP-00021: 操作系统错误 - 错误代码(十进制 2 ,十六进制 0x2 )
IMP-00000: 未成功终止导入
3 . 2 Oracle 的 Export/Import 工具只能连接到拥有更高或者一样的 Export/Import 版本的数据库
a)Oracle 8.1.6 远程数据导入
在 Oracle 8.1.6 数据库服务器导出转储二进制文件: ora816.dmp 。
在 Oracle 8.1.6 数据库服务器向 Oracle8.0.5 数据库进行数据远程导入
D:>Imp house/password@orclfrom816to805 file=d:/ ora816.dmp log=d:/ora816.log full=y
(orclfrom816to805 为数据库连接字符串由 Oracle8.1.6 数据库指向 Oracle8.0.5 数据库 )
/* 日志显示 */
连接到 : Oracle8 Release 8.0.5.0.0 – Production
PL/SQL Release 8.0.5.0.0 – Production
……
经由常规路径导出由 EXPORT:V08.01.06 创建的文件
已经完成 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集中的导入
IMP-00003: ORACLE 错误 2248 出现
ORA-02248: 无效的 ALTER SESSION 选项
IMP-00000: 未成功终止导入
b) 在 Oracle 8.0.5 数据库服务器上用 exp80 对 Oracle 8.1.6 数据库进行远程导出。
D:>exp80 house/password@orclfrom805to816 file=d:/ora816.dmp log=d:/ora816.log
(orclfromfrom805to816 为数据库连接字符串由 Oracle8.0.5 数据库指向 Oracle8.1.6 数据库 )
/* 日志显示 */
连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production
With the Partitioning option
JServer Release 8.1.6.0.0 – Production
已导出 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集
即将导出指定的用户 ...
……
在没有警告的情况下成功终止导出。
再对远程导出的转储文件在 Oracle 8.0.5 数据库服务器上用 imp80 导入。
D:>imp80 house/password file=d:/ora816.dmp full=y log=d:/ora816 _i.log
显示成功导入
此刻此移植就变成了 Oracle 8.0.5 For NT 移植至 Oracle 8.0.4 For Digital Unix 的移植。
初步设想也通过 Oracle 8.0.5 进行过度。因其版本比 Oracle 8.0.5 高、下面对参考的规则进行一些校验。
3 . 1 高版本的 Export 导出来的转储文件,低版本的 Import 读不了
在 Oracle 8.1.6 数据库服务器导出转储二进制文件: ora816.dmp 。
在 Oracle 8.0.5 数据库服务器上用 Imp80 进行导入。
D:>Imp80 house/password file=d:/ ora816.dmp log=d:/ora816.log full=y
/* 日志显示 */
已连接到: Oracle8 Release 8.0.5.0.0 – Production
PL/SQL Release 8.0.5.0.0 – Production
IMP-00010: 不是有效的导出文件,标题检验失败
IMP-00021: 操作系统错误 - 错误代码(十进制 2 ,十六进制 0x2 )
IMP-00000: 未成功终止导入
3 . 2 Oracle 的 Export/Import 工具只能连接到拥有更高或者一样的 Export/Import 版本的数据库
a)Oracle 8.1.6 远程数据导入
在 Oracle 8.1.6 数据库服务器导出转储二进制文件: ora816.dmp 。
在 Oracle 8.1.6 数据库服务器向 Oracle8.0.5 数据库进行数据远程导入
D:>Imp house/password@orclfrom816to805 file=d:/ ora816.dmp log=d:/ora816.log full=y
(orclfrom816to805 为数据库连接字符串由 Oracle8.1.6 数据库指向 Oracle8.0.5 数据库 )
/* 日志显示 */
连接到 : Oracle8 Release 8.0.5.0.0 – Production
PL/SQL Release 8.0.5.0.0 – Production
……
经由常规路径导出由 EXPORT:V08.01.06 创建的文件
已经完成 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集中的导入
IMP-00003: ORACLE 错误 2248 出现
ORA-02248: 无效的 ALTER SESSION 选项
IMP-00000: 未成功终止导入
b) 在 Oracle 8.0.5 数据库服务器上用 exp80 对 Oracle 8.1.6 数据库进行远程导出。
D:>exp80 house/password@orclfrom805to816 file=d:/ora816.dmp log=d:/ora816.log
(orclfromfrom805to816 为数据库连接字符串由 Oracle8.0.5 数据库指向 Oracle8.1.6 数据库 )
/* 日志显示 */
连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 – Production
With the Partitioning option
JServer Release 8.1.6.0.0 – Production
已导出 ZHS16GBK 字符集和 ZHS16GBK NCHAR 字符集
即将导出指定的用户 ...
……
在没有警告的情况下成功终止导出。
再对远程导出的转储文件在 Oracle 8.0.5 数据库服务器上用 imp80 导入。
D:>imp80 house/password file=d:/ora816.dmp full=y log=d:/ora816 _i.log
显示成功导入
此刻此移植就变成了 Oracle 8.0.5 For NT 移植至 Oracle 8.0.4 For Digital Unix 的移植。
好的例子
表1
id ,BID, date
1 303 2003-4-6
2 303 2003-5-6
3 303 2004-4-3
4 304 2003-2-5
5 304 2003-5-3
6 304 2003-6-4
7 305 2003-5-6
8 305 2003-7-6
字段
id
是一个序列,主要是找每个
BID
中相同的
BID
中最大的时间对应的
id
,如何写这个
SQL
语句啊??
结果用给是,
3 303 2004
-
4
-
3
6 304 2003
-
6
-
4
8 305 2003
-
7
-
6
select abc.id,abc.bid,abc.date
from abc
where abc.id in (select Max(abc.id) from abc group by abc.bid)
SELECT max(abc.ID) as id, abc.bid
FROM abc
GROUP BY abc.bid;
234更新存储过程
pl/SQL
command window
execute FILLRULEBASE
导入存储过程
cmd plus
start 存储过程