关闭

oracel 重要记事

标签: oracle语言sql存储join
1018人阅读 评论(0) 收藏 举报

1: length('‘) 的值是多少?  

       与length(null)的值一样,值均为null。因此,使用等于(=),不等于(!=,<>)这些运算都是不成立的。 length系列函数都一样,如:lengthB, lengthC, length2, length4。 同理, substr系列函数也一样。

2: pro *c 中一次 fetch 多条数据时,若遇到空值,则每次只fetch到空值所在行为止。 一个典型的处理方式如下:

EXEC SQL PREPARE s1 FROM :sSQLCode;
EXEC SQL DECLARE cur_s CURSOR FOR s1;
EXEC SQL OPEN cur_s;
根据 sqlca.sqlcode进行错误处理(打开游标是否出错);
for(; ;)
{
    EXEC SQL FETCH cur_s INTO :sArrVar;
        
    iCurrQryQt = sqlca.sqlerrd[2] - lHadQryQt;  //本次返回记录条数        
    lHadQryQt = sqlca.sqlerrd[2];               //已返回的总记录数
    
    根据 sqlca.sqlcode进行错误处理;
    如果找不到数据,则设置退出标志        

    for (i = 0; i<iCurrQryQt ; i++)
    {
        对每一条记录进行处理            
    }
    
    if ((iCurrQryQt < N_FETCH_ROW_MAX_QT) && (退出标志为真)) break;
}

其中 sArrVar是一个数组,假设元素个数为10,那么正常情况下一次会fetch到10条记录,但当记录有空值时,一次fetch只到空值所在的记录行。

3.oracle  NUMBER类型

Oracle number datatype 语法:NUMBER[(precision [, scale])]
简称:precision --> p (精度即有效位数)     scale     --> s (小数位数)

NUMBER(p, s)
范围: 1 <= p <=38, -84 <= s <= 127
保存数据范围:-1.0e-130 <= number value < 1.0e+126   
保存在机器内部的范围: 1 ~ 22 bytes

有效为:从左边第一个不为0的数算起的位数。
s的情况:
s > 0
   精确到小数点右边s位,并四舍五入。然后检验有效位是否 <= p。可以直观地理解为,数值总长度为p位(除去小数点),其中有s位为小数。
s < 0
   精确到小数点左边s位,并四舍五入。然后检验有效位是否 <= p + |s|。
s = 0
   此时NUMBER表示整数。 

可以与C语言中数值是一样理解,他们在内存中都是以指数形式存储的(科学计数法,如 0.1234 * 10^3),其存储方式如下:|正负号一位 | 有效数字 | 指数 |
如 242567 在内存的存储方式: | + | 0.24567 | 2 |,即一位的符号位,中间是有效数字,后面是指数2 (10的2次方)。
尽管如此,oracle的number类型的有效数字比C语言的double的多,在32位机的C语言中,浮点型数据的精度和范围如下,


类型说明符

比特数(字节数)

有效数字

数的范围

float

32(4)

6~7

10^-37~10^38         

double

64(8)

15~16

10^-307~10^308

long double

128(16)

18~19

10^-4931~10^4932

显然, oracle的number类型的有效数字高达38位,远远超过了C语言的19位。如此一来,在PRO *C进行程序设计中,将数值从数据库select ... into 或fetch .. into到本地变量时,有可能造成有效性数字的损失。同理,由于宿主语句对应数据类型的范围不同,也可能产生数值不可控的情况。

4.  Pro *C的语法支持:Pro*C对PL/SQL语法的支持是有限的,典型的就是不支持INNER JOIN, LEFT OUTER JOIN等语法,但这并不是说不支持内连接和外连接,而是换一种形式支持。内连接就不用说了,外连接可以采用外连接操作符(+)来实现。  除此之外,Pro*C还不支持WITH等语法。因此对于一些新奇的语法,最好先写个小例子程序来试试能不能编译过,不然,编译不过的时候等着哭吧。 

5. oracle的trigger中不能访问trigger所在的表

http://www.blogjava.net/john_yu/archive/2007/04/27/114215.html

 

6. 更改列名

alter table .. rename column .. to ..;


7. plsql中建表 报没有权限,需要在声明过程,或包的时候,加上 AUTHID CURRENT_USER

如:create or replace package adjust_data AUTHID CURRENT_USER  is xxxx;

参考见: http://bbs.csdn.net/topics/360200923


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:356308次
    • 积分:3935
    • 等级:
    • 排名:第7954名
    • 原创:53篇
    • 转载:24篇
    • 译文:0篇
    • 评论:42条
    最新评论
    ubuntu&amp;mpi