sql

来源:互联网 发布:淘宝卖最快的是 编辑:程序博客网 时间:2024/06/17 00:02
oracle公司在8.0.*之前,都是直接用这些繁琐的*.*.*来表示版本号的,到了8.1.*后,
他们就开始用8i或者9i来表示了,突现他们公司对internet/intranet的支持,到了版本10,
便使用10g来表示了,突现他们对网格的支持。说白了,就是ORACLE数据库产品的版本号。




在plsql中可以使用的sql语句有:
insert  update  delete  select into    commit  rolllback  savepoint
在plsql总只能用sql语句中的dml部分,不能用ddl部分,如果要在plsql中使用ddl的话,只能以动态的方式来使用。




plsql程序由三个块组成,即声明部分、执行部分、异常处理部分。
块结构  declear   声明用到的变量、类型及游标,以及局部的存储过程和函数。
            begin     过程及sql语句(必须的)
            exception    错误处理
            end;


  标识符             命名规则                例子  
程序变量            V_name           V_name  
程序常量            C_Name          C_company_name 
游标变量       Name_cursor         Emp_cursor 
异常标识           E_name              E_too_many  
表类型          Name_table_type Emp_record_type 
表                 Name_table         Emp  
记录类型  Name_record            Emp_record
SQL*Plus替代变量 P_name                      P_sal  
绑定变量         G_name               G_year_sal       
ROWID存放数据库行号
UROWID通用行标识符,字符类型    


:=   是储存过程的赋值的意思
%TYPE表示相同的类型,例如:employees.last_name%TYPE  和表employees的last_name一样的类型 
                                             v_balance%TYPE := 10       和v_balance一样的类型
变量
v_hiredate       DATE;
v_count           binary_integer := 0;
v_total_sal      NUMBER(9,2) :=0;
v_orderdate   date:=sysdate+7;
c_tax_rate      constant number(3,2):=8.25;
v_valid           boolean not null:=true;
v_name          employees.last_name%TYPE;(表示类型一致的变量类型)
v_min_balance  v_balance%TYPE :=10;
大家注意,在标准的PLSQL中定义变量是不能用VARIABLE关键字的,此关键字只在SQLPLUS执行环境中有效,
可使用PRINT语句输出变量内容。
在PLSQL中使用这种变量时,前面加”:”,以示区分。


&p_annual_sal在Plsql Developer的SQL window执行环境中,可用于提示用户输入一个具体
的值  &用来接受用户输入的值


在SQLPLUS中执行DBMS_OUTPUT.PUT_LINE ()前,必须先执行:
SET SERVEROUTPUT ON,而在PLSQL Developer的SQL Window中则不需要这句话。


多行注释/*  */
单行注释--语句


块限定词
begin<<outer>>
...
end outer;




insert into注意点:该语句支持单行的查询结果,
如果Where条件控制不好,导致多行
查询结果,则会引发Too_many_rows
的例外,会报错。


dml数据操作语言INSERT、 UPDATE、 DELETE、 MERGE语句: 在PLSQL中执行这些SQL语句和直接执行这些语句差不多,
只不过可以在SQL语句中使用PLSQL声明的变量;

LOOP
statement1;
. . .
EXIT [WHEN condition];
END LOOP;


WHILE condition LOOP    Condition is evaluated at the
                                         beginning of each iteration.
statement1;
statement2;
. . .
END LOOP;


FOR counter IN [REVERSE倒叙]
lower_bound..upper_bound LOOP
statement1;
statement2;
. . .
END LOOP;




嵌套循环和Label(一般用不着,只有在goto或者内部循环需要访问外部变量时才需要)
...
BEGIN
<<Outer_loop>>
LOOP
v_counter := v_counter+1;
EXIT WHEN v_counter>10;
<<Inner_loop>>
LOOP
...
EXIT Outer_loop WHENtotal_done = 'YES';




SELECT employee_id, last_name, salary*12 annsal
FROM employees
ORDER BY annsal;
按照字段别名排序:
SELECT last_name, department_id, salary
FROM employees
ORDER BY depart
-- Leave both loops
EXIT WHENinner_done = 'YES';
-- Leave inner loop only
...
END LOOPInner_loop;
...
END LOOPOuter_loop;
END;




显式转换
TO_CHAR(DATE,''FORMATE_MODEL);
TO_CHAR(NUMBER,''FORMATE_MODEL);




想建立自然连接,又想控制只使用department_id作为连接条件怎么办?用using关键词
SELECT e.employee_id, e.last_name, d.location_id
FROM employees e JOIN departments d
USING (department_id) ;
条件用on   ON d.department_id = e.department_id


1、SELECT查询语句中同时选择分组计算函数表达式和其他独立字段时 ,其他字段必须出现在Group By子
句中,否则不合法
2、不能在Where条件中使用分组计算函数表达式,当出现这样的需求的时候,使用Having子句。


WHERE 搜索条件在进行分组操作之前应用;而 HAVING 搜索条件在进行分组操作之后应用。HAVING 语法与 
WHERE 语法类似,但 HAVING 可以包含聚合函数。HAVING 子句可以引用选择列表中显示的任意项。
0 0
原创粉丝点击