oracle毛病(二)

oracle

接第一篇:
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

时间: 2024-10-28 02:11:26

oracle毛病(二)的相关文章

JAVA与Oracle存储过程(二)

在前一篇文章中简单介绍了JAVA程序如何调用Oracle存储过程的基本语法程序结构, 本文将介绍JAVA跟Oracle的另一种关系,即通过JAVA编写Oracle存储过程. 通常情况下,我们都是使用Oracle数据库系统中的ps/sql语句来为oracle编写各种存储过程,不过,在Oracle的第八个版本8之后,为我们提供了编写存储过程的另一种新的选择,那就是使用JAVA来编写Oracle存储过程.从Oracle8.0版本开始,在Oracle数据库系统中自带了java虚拟机jvm,因此使得Ora

【Oracle】 RAC 环境删除oracle 之二

oracle 11GR2提供了一个自动删除工具deinstall 在$ORACLE_HOME 的deinstall 目录下,使用此工具可以实现卸载oracle 软件,Clusterware 软件和数据库. 删除了数据库和软件以后,再删除Clusterware 软件. 删除之前集群软件正常运行.直接运行deinstall grid@rac1:/opt/11202/11.2.0/grid/deinstall>./deinstall Checking for required files and bo

在阿里云上遇见更好的Oracle(二)

从上一篇文章的反馈来看,大家还是喜欢八卦多过技术细节,那这一篇继续一些题外话,说说我对"去IOE"的看法. 对同一件事情,参与的没参与的人,讨论起来,都会有各自的立场.所以这里先申明一下,以下内容只是我个人的观点,与任何公司及组织及其他个人皆无关:限于个人记忆力,部分细节可能有出入,如有差错,纯属年老失忆. 淘宝当年从单个Java应用到服务化后的垂直分库,再到水平分库,一步一步走过来,每一步皆有其必然性.但从传播性和话题性上来讲,"淘宝技术架构升级",显然不如&qu

数据库页面结构——Oracle篇(二)

页面是数据库存储管理的基本单位,也是和磁盘交互的最小单位.页面在数据库中有承上启下的作用,页面支撑着数据库的各种管理功能,包括表管理.索引管理.集群管理以及缓冲区管理等.在页面上也保存着数据库中最重要的信息--用户数据,所以页面的管理非常重要,今天接着讨论Oracle页面管理更详细的内容,主要包括页公共头.事务层.表目录.项目录.数据区域以及尾巴. Page Common Header Oracle数据库的页公共头是所有的页面都有的一个结构,其大小为20个字节,内容主要包括: 1.页面的类型,占

Oracle 数据库的安全策略

oracle|安全|策略|数据|数据库 Oracle 数据库的安全策略(一) Oracle 是关系型数据库管理系统,它功能强大.性能卓越,在当今大型数据库管理系统中占有重要地位.在我们开发的一 MIS 系统中,选用了 Oracle7.3 数据库.在正常情况下, Oracle 数据库会保证数据的安全.稳定,为用户提供正确的数据,但由于计算机系统的故障(硬件故障.软件故障.网络故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失,整个系统都将处

Oracle数据库的安全策略全面解析

oracle|安全|策略|数据|数据库 Oracle是关系型数据库管理系统,它功能强大.性能卓越,在当今大型数据库管理系统中占有重要地位.在我们开发的一MIS系统中,选用了Oracle7.3数据库.在正常情况下,Oracle数据库会保证数据的安全.稳定,为用户提供正确的数据,但由于计算机系统的故障(硬件故障.软件故障.网络故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失,整个系统都将处于瘫痪状态.因此,如何保证Oracle数据库的安全就

Oracle数据库系统的安全策略

oracle|安全|策略|数据|数据库 Oracle是关系型数据库管理系统,它功能强大.性能卓越,在当今大型数据库管理系统中占有重要地位.在我们开发的一MIS系统中,选用了Oracle7.3数据库.在正常情况下,Oracle数据库会保证数据的安全.稳定,为用户提供正确的数据,但由于计算机系统的故障(硬件故障.软件故障.网络故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失,整个系统都将处于瘫痪状态.因此,如何保证Oracle数据库的安全就

Borland C++ Builder 5 企业版使用BDE访问 Oracle方法

c++|oracle|访问           Borland C++ Builder 5 企业版使用BDE访问 Oracle方法 系统环境: 1.操作系统:Windows 2000 Server2.数据库: Oracle 8i R2 (8.1.6) for NT 企业版3.开发工具:Borland C++ Builder 5 企业版 连接方法: 一.安装 Oracle 8i R2 (8.1.6) for NT 企业版 使用典型安装,安装目录为D:\Oracle: 二.安装 Borland C+

Red Linux 6.0下安装Oracle 10g

一. 环境说明 RedHat Enterprise Linux 6.0 + Virtual Box 4.1.8 + Oracle 10g 二. 安 装前配置 1. 安装Oracle 10g R2所需的软件包 用root登录到系统,依次安装以下包 # cd /mnt/cdrom/Server/ # rpm -Uvh setarch-2* # rpm -Uvh make-3* # rpm -Uvh glibc-2*(这里匹配了两个软件包 有一个i386无法安装,直接 # rpm -Uvh glibc