数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
oracle毛病(二)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

接第一篇:

11. PL/SQL的用户们, 看看下面:

  创建一个没带参数的procedure:
  create or replace procedure proc_name as
  i number;
  begin
  ...
  end proc_name;

  创建一个带参数的procedure:
  create or replace procedure proc_name(arg1,...) as
  i number;
  begin
  ...
  end proc_name;
  你很习惯用declare来声明吗? 不行, 这里不行, 你必需听我的, 用as

  创建一个触发器:
  create or replace trigger tri_name before insert on tname for each
  row
  declare
  i number;
  begin
  ..
  end;
  因为这是触发器, 所以它要用declare来声明变量, 尽管触发器用的也是PL/
  SQL的语法. 但我们是为了区别于其它类型的存储过程, 为了让用户觉得
  ORACLE高深莫测一点.
  怎么就一个end;不是end tri_name吗? 是的, procedure和function是这样
  设计的, 但这样可以让用户觉得更难用一点么!
  
  (sqlplus下)你调用一个不带参数的procedure:
  call proc_name();
  (sqlplus下)你调用一个不带参数的procedure:
  call proc_name(arg1, arg2);
  是的, 它不是可选的, 它必需如此, 定义一个没有参数的procedure就是不
  要空的()号, 但调用它的时侯就是要, 定义一个有参数的procedure当然也要.
  function的情况与这个也一样.

  你调用一个function:
  ret_val := func_name();
  什么? 你不需要ret_val, 不行, 这是强买强卖, 不要不行. 否则我不干活!
  而且, 哼哼, 我给出的错误信息保证你看不懂.

  你要玩更高级的设计方法, 用上包了:
  create or replace package pack_name as
  ....
  end pack_name;
  是的, 这只是包的声明.
  要想定义这个包, 你还得:
  create or replace package body pack_name as
   procedure proc_name is
   --你不是说用as吗? 是的, 但是这里as已经被上一条语句用了, 呶! 你
   也看到了. 用is有什么不好?
   end proc_name
   function func_name is
   ...
   end func_name
  end pack_name;

12. 看看出错信息, 来自SQLPLUS的, 来自Pro*C预编译器的, 来自其它工具如
  imp, exp, sqllda的. 说不准你也别误导呀.

13. 疲惫不堪的Pro*C程序员们:
  在函数foo中你已经声明了
  EXEC SQL WHENEVER SQLERROR GOTO sql_err;
  在另一个函数bar里你只想默默地使用
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  但你没特别声明, Pro*C的预编译器会告诉你, 它在函数bar中找不到sql_err
  标号!!! 它可以跨函数使用标号. 它也敢自称是一个预处理器跟编译器沾沾
  边, 刚才用陈桥五笔敲出来的处理器三个字恰好跟处理品是同样的键码, 我看
  叫处理品倒是名符其实.

14. DDL语句的用户们:
  alter table tname add(col1 type...);
  alter table tname modify(col1 type...);
  alter table tname drop column(col1);
  为何非要在drop里多出来一个column?

15. 命名
  user_cons_columns;
  user_constraints;
  user_rollback_segs;
  它真的要把segment统统缩写为segs吗? 把constraints缩写为cons? 把
  columns缩写为cols? 不, ORACLE的程序员们想怎么样就怎么样. 他们是觉得
  单词的全称太长了吗? 不见得, desc dba_users;看一下
  看看INITIAL_RSRC_CONSUMER_GROUP字段, 看看temporary_tablespace字段.

  再来看看一下create table:
  create table tname (col1 type,...) storage(initial .. next ..
  minextents .. maxextents ..) ...;
  desc user_tables;
  inital_extent
  next_extent
  minextents
  maxextents
  不要问他们为什么有的用单数有的用复数, 因为他们是ORACLE. 他们想这样.
  dba_tables中owner
  dba_sequences中叫sequence_owner
  user_tab_columns是关于一张表中列信息的, _tab_columns
  user_cons_columns是关于表中字段的约束信息的, _cons_columns




相关文章

相关软件