本站文章均为原创,欢迎转载,转载请注明出处.谢谢!
分类: 数据库预览模式: 普通 | 列表

Oracle PL/SQL:IF语句的使用

原文:http://psoug.org/reference/control_struct.html
IF语句的使用
A.基本的IF条件语句:
基本语法:


IF <condition> THEN
  <code here>
END IF;


Example:

SQL> set serveroutput on;
SQL> declare
   x number(3):=9;
    begin
    if x<10 then
    dbms_output.put_line('x is less than10');
    end if;
   end;
   /


结果:
x is less than10

PL/SQL procedure successfully completed



B.IF - ELSE 语句

基本语法:

IF <condition> THEN
  <code here>
ELSE
  <code here>
END IF;


Example:


DECLARE
x NUMBER(3) := 10;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  ELSE
    dbms_output.put_line('X is not less than 10');
  END IF;
END;
/


结果:
X is not less than 10

PL/SQL procedure successfully completed


C:IF - ELSIF - ELSE 语句

基本语法:

IF <condition> THEN
  <code here>
ELSIF <condition> THEN
  <code here>
ELSIF <condition> THEN
  <code here>
ELSE
  <code here>
END IF;





Example:


set serveroutput on

DECLARE
x NUMBER(3) := 47;
BEGIN
  IF x < 10 THEN
    dbms_output.put_line('X is less than 10');
  ELSIF x = 10 THEN
    dbms_output.put_line('X is equal to 10');
  ELSIF x < 100 THEN
    dbms_output.put_line('X is between 11 and 99');
  ELSE
    dbms_output.put_line('X is greater than 99');
  END IF;
END;
/



结果:
X is between 11 and 99

PL/SQL procedure successfully completed


D:与NULL值比较处理

Example:


declare
       v NUMBER;
   begin
       if v = 1 then
           DBMS_OUTPUT.put_line('Equal to 1');
       elsif v!= 1 then
           DBMS_OUTPUT.put_line('Not equal to 1');
       elsif v = v then
           DBMS_OUTPUT.put_line('Equal to itself');
       else
           DBMS_OUTPUT.put_line('Undefined result');
       end if;
       v:=v+1;
       DBMS_OUTPUT.put_line('New value: <'||v||'>');
   end;
/


结果:

Undefined result
New value: <>

PL/SQL procedure successfully completed



查看更多...

Tags: IF语句

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 431

总结Kill Session 的几种方法

1.在PL/SQL Developer 中 菜单"工具"--->Sessions



选择要Kill的Session,鼠标右键进行操作




2.在Toad 启动Toad,切换到Session Browser




进入以下界面,查看所有对应User所开启的Session




鼠标右键,或点击左上角的按钮对Session进行操作






3.直接用SQL语句 查找所有Session

Select b.sid,
       b.serial#,
       a.spid,
       b.program,
       b.osuser,
       b.machine,
       b.type,
       b.event,
       b.action,
       b.p1text,
       b.p2text,
       b.p3text,
       b.state,
       c.sql_text,
       b.logon_time
  FROM v$process a, v$session b, v$sqltext c
Where a.addr = b.paddr
   AND b.sql_hash_value = c.hash_value
   AND b.STATUS = 'ACTIVE'
orDER BY a.spid, c.piece
[code]

杀进程

[code]
Alter system KILL session 'sid, serial#'




查找及干掉锁死的代码

Select /*+RULE*/
s.machine,
s.osuser     "O/S-User",
s.username   "Ora-User",
s.sid        "Session-ID",
s.serial#    "Serial",
s.process    "Process-ID",
s.status     "Status",
l.name       "Obj Locked",
l.mode_held  "Lock Mode",
s.logon_time
  FROM v$session s, dba_dml_locks l, v$process p
Where l.session_id = s.sid
   AND p.addr = s.paddr --and l.name='RCV_TRANSACTIONS_INTERFACE'
order by s.logon_time



alter system kill session 'sid,serial#';

alter system kill session 'Session_ID,serial';





4.在Unix and Linux 操作系统中使用命令Kill Session

$ps -ef|grep ora_|grep -v grep

eg:$kill -9 1451




5.在Windows操作系统中使用命令Kill Session

SQL> select a.username, b.spid from v$session a, v$process b where a.paddr = b.addr and a.username ='SCOTT';

USERNAME SPID.
-------- ----
SCOTT 1456


C:\> orakill instance_name spid

C:\> orakill orcl 1456



6.在Windows中使用TASKKILL 命令

C:\>tasklist

Image Name PID Session Name Session# Mem Usage
=============== ======== ======== ============
System Idle Process 0 Console 0 16 K
oracle.exe 1456 Console 0 282,100 K
smss.exe 636 Console 0 420 K

C:\>taskkill /pid 1456 /T


7.使用NET STOP 及NET START命令

C:\>NET STOP "OracleServiceORCL"

C:\>NET START "OracleServiceORCL"
[/code][/code]

查看更多...

Tags: Kill Session 杀进程

分类:数据库 | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 396
先前实现过的,还记录了Blog.不过这次有点不一样,记录一下。感谢fredrickhu

求同一商品不同代理在相同条件下的最新价 ,如题


表:

商品代号    代理号      型号      代理价    生效日

1001      A01          H042        3.80      2009-11-12

查看更多...

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 572

Oracle几个常用的伪列(Pseudo-column)使用

Oracle的Pseudo-column,常被翻译成伪列,也有人翻译成虚拟字段。常常有我们的数据操作中带来一些意想不到的效果.
常用到的主要有
sysdate, systimestamp,RowNum ,RowID, CURRVAL, NEXTVAL,UID, USER,Level,ORA_ROWSCN

1.SYSDATE, SYSTIMESTAMP,
SYSDATE 返回当前的系统时间。SYSTIMESTAMP 以TIMESTAMP WITH TIMEZONE 返回当前的日期和时间 sysdate是取机器的时间的, 而systimestamp是显示数据库的时区所在的时间

Select  SysDate from dual
获取当前服务器时间
结果: 2009-07-14 8:39:28


select  sysdate,sysdate - interval '1' MINUTE  from dual

查看更多...

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 867

Oracle学习:包

Oracle的程序包是由包头和包体组成(一般也称为程序包说明和程序包体),是一种将多个程序员模块(函数 存储过程 变量 游标等)组合起来的一个Function.
1.    与一般的程序模块的区别在于:程序包有两部分组成,包头可以将其看作一个对外的接口来使用,而包体则可以看作具体接口业务的具体实现,包体的声明部分与PL/SQL中的函数或存储过程的声明 部分差不多.但在包体中的变量、常量、游标对包用户而言是不可见的。
2.    程序包的作用:程序包就像面向对象过程的一个具体类的实现,具有结构化、重用性、模块性的特点,同时程序包中所定义的变量及常量可根据业务逻辑的需要定义为不可见或可见性,包将功能的接口与功能的实现相分离,让代码的维护更加容易,同时通过在包体中保持数据的安全防止用户直接对数据进行访问。
3.    包头(程序包说明)
包头是oracle包与应用程序的接品,用于定义包中的公有组件(变量、常量、存储过程、函数、游标等)。包头所定义的公用组件不仅可以在包内使用,也可以在其它存储过程或函数中使用权。

4.    包体(程序包体)

5.    包头的格式
Create or replace package package_name is| as
[PRAGMA SERIALLY_REUSABLE;]
公有数据类型定义
公有变量声明

查看更多...

Tags: Oracle学习:包

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1079

Oracle包操作:增删改除查

我这是模仿一本书上来写的,编译是通过了,可不是知对不对。刚学,作个笔记吧。


create or replace package UBS_USER_PKG is


  type user_record_type is record
  (
  userID number(4),
  username varchar2(20),
  createdate date,
  deptID number(4),
  gender number(1),

查看更多...

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 870

Oracle学习:管理表的策略

设计表
开发数据库应用系统时,数据库管理员负责规划和建立表空间,而规划和建立表则往往是由应用开发人员完成的。应用开发人员设计表时应考虑以下因素:
<1>在为表、列、索引的视图、同义词、触发器等与表有关的对象命名时,应该使用权有意义的名称,其格式要有利于区分这些对象。
<2>为了给用户和其它人员提供有意义的帮助信息,应该使用权Comment命令描述表、列的作用.
<3>设计表时,应该使用权范式来规划每个表.范式分为第一范式 第二范式 第三范式 范式越高,表的设计越规范.
<4>定义表列时,应该选择合适的数据类型和长度,为了节省存储空间,应该将可以取Null值的列放在后面.
<5>确定表中所需的完整性约束。
<6>在合适的情况下,使用簇表以节省存储空间并提高特定类型的SQL语句的性能.

规划表的类型
在Oracle数据库中,存储用户数据可以使用标准表 索引表 簇表 和分区表.
标准表:数据按堆组织,以无序方式存放在单独表的表段中.这种表是最基础最常用的数据库表类型,是默认情况下创建的表.
索引表:数据是以”B-树”结构存放在主键约束所对应的索引段中.使用索引表时,索引叶子节点不仅包含了键列的数据还包含了其他非键列的数据。

查看更多...

Tags: 表的策略

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 872

Oracle学习:数据库规划


Oracle相对于SQL的复杂程序有过之而无不及,DBA管理数据库需要事先有一个完善的数据库规划方案.

一.对数据库中可能包含的表和索引等方案对象的大小数量进行评估,确定所需数据库的空间大小并以此创建表空间.
二.对数据库所包含的操作系统文件的布局进行规划,结合数据库运行的特点来考虑它们在磁盘上的存放位置,以便适当均衡磁盘I/O操作,改善数据库性能.
三.考虑用Oracle管理文件的特性来创建和管理包含数据库存储的操作系统文件.
四.为新数据库选择全局数据库名称.在确定全局数据库名称的时候也需要确定数据库名和系统标识符SID,全局数据库是数据库在网络结构中最重要的属性,是其在网络结构中的名称和位置.
五.熟悉与数据库相关的初始化参数(初始化参数文件)
六.选择数据库字符集.包括数据字典中的数据都存储在数据库字符集中.在创建数据库时必须指定数据库字符集,若用户使用不同的字符集访问数据库,则需要选择包含这些用户的字符集的超集,这样才能确保系统很方便地使用替代字符完成字符转化,节省时间.
七.选择标准的数据库块尺寸.
八.使用撤消表空间来管理撤消记录.
九.建立一套完善的备份和恢复策略或方案,防止数据库出现错误.通过多路复用技术保护控制文件,选择合适的备份模式并管理联机和归档的重要日志.
十.熟悉数据库启动和关闭实例

查看更多...

Tags: 数据库规划

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 961

常用的数据库统计SQL语句(2)

1.解决被零除(零做除数时)

--来自百度问吧

在统计系统中,需要求百分数,
如(sum(baseprice)-sum(quote))/sum(baseprice)*100)中,
如果sum(baseprice)为0,系统会报错,不能运行

把sum(baseprice) 改为
nullif(sum(isnull(baseprice,0)),0)
就可以了,除于0会出错,除于null就不会出错了

查看更多...

Tags: 数据库统计SQL语句

分类:数据库 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1002