Liny_@NotePad

沉迷ACG中

ORA-02266: 表中的唯一/主键被启用的外部关键字引用

在想要截断表的时候报了这个错误,原因是表中的主键被其他表的字段引用了。

解决方法是先禁用表的主键约束,等截断后再启用:

ALTER TABLE title DISABLE PRIMARY KEY CASCADE;
TRUNCATE TABLE title;
ALTER TABLE title ENABLE PRIMARY KEY;
ALTER TABLE title_configure ENABLE CONSTRAINT fk_titlecfg_titleID;

* 注意的是在ENABLE主键后不会自动恢复外键(没有cascade选项),因此需要手工对引用该键的约束进行ENABLE。

access里执行sql。。

本以为只能执行查询的。。今天试了下。。

打开数据库,查询-新建查询-设计视图,弹出[显示表]对话框,直接关闭,在上方的灰色区域中右击,选择[SQL视图]即可手工输入SQL。

Oracle客户端远程连接配置。。

首先打开Net Configuration Assistant,命名方法配置里选上:ORACLE NAMES、本地、主机名。

接着在本地NET服务名配置中添加,填入目标的host名、服务名与端口号,默认将采用scott/tiger进行连接。

(host名可以通过在控制台里tnsping主机IP获得)

测试成功后运行SQL*Plus,主机字符串填入配置在本地NET里的服务名,即可进行连接。

MySQL: Unknown type '246 in binary-encoded result set.

在执行SUM函数时报错,COUNT函数却可以正常使用。

百度了下,说是MYSQL5在decimal类型上有BUG,需要改成int。可是我明明就是用int…… = =

又说jar包版本太低,于是将3.2.0的换成5.0.8的,导入一堆jar包。结果运行起来PreparedStatement的asSql方法报空指针。

换成5.0.6的jar包,终于正常了啊 T O T

MySQL curDate() + 7..

原来不会那么智能。。比如今天是"20091027",这个执行的结果会是"20091034",

插入数据库就报了Incorrect datetime value错误。。

正确写法应该使用date_add函数:date_add(curdate(), interval 7 day) ,笔记之。

MySQLSyntaxErrorException: This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

同学的一个项目。。之前的数据库是MSSQL的,满目的top在子查询语句中,于是照猫画虎,把top和pageSize放到后面改成limit,发现报错。

这个错误的意思是,该版本的MySQL不支持LIMIT在IN/ALL/ANY/SOME的子句中。

其实 = = limit函数已经很好用了。。比如原来的MSSQL用的拼接语句是

  1.                 sqlStr = "select top " + pageSize + " * from IndentInfo";
  2.                 if (page == 1)
  3.                 {
  4.                         sqlStr = sqlStr + " order by Id desc";
  5.                 }else {
  6.                         sqlStr = sqlStr + " where Id not in ( select top " + (recordCount-pageSize * page ) + " Id from IndentInfo order by Id
  7. ) and Id in " +
  8.                         "(select  top " + (recordCount - pageSize * (page-1)) + " Id from IndentInfo  order by Id) " + " order by Id desc";
  9.                 }

改为MySQL用的拼接语句则可以是:

  1.                 sqlStr = "select * from IndentInfo";
  2.                 if (page == 1)
  3.                 {
  4.                         sqlStr = sqlStr + " order by Id desc limit " + pageSize;
  5.                 }else {
  6.                         sqlStr = sqlStr + " order by Id desc limit " + (recordCount - pageSize * (page-1)) + ", " + pageSize;
  7.                 }

limit中的参数如果只有1个,则表示页面大小;如果有2个,则第一个参数为起始记录,第二个参数为页面大小。

【应试】数据库设计范式

舍友周日要考数据库……于是给她搜到一篇网摘,写得不错 顺便转进来……
转自:http://blog.csdn.net/wydin/archive/2004/09/15/104903.aspx

PL/SQL课堂练习(过程、函数、包、触发器)

1、过程练习,掌握过程参数(in/out/in out)及调用环境
 1.1)过程名字PROC_EMP(in hireYear,out manCount,in out commis_pct)
  需求描述:
   输入一个hireYear,计算出该年入职的员工数staffCount;
   给定一个commis_pct,上述范围的职员如果没有提成(commission_pct)的,
   用这个数作为他的提成,已有提成的,不做改动
   上述范围职员的提成最大值用commis_pct参数返回

  1. CREATE OR REPLACE PROCEDURE proc_emp(hireYear IN NUMBER, manCount OUT NUMBER, commis_pct IN OUT NUMBER) IS
  2.        
  3.        -- 计算出该年入职的员工数staffCount
  4.        SELECT COUNT(*)
  5.        INTO manCount
  6.        FROM employees
  7.        WHERE hireYear = TO_CHAR(hire_date,'yyyy');
  8.        
  9.        -- 给定一个commis_pct,上述范围的职员如果没有提成(commission_pct)的,
  10.        -- 用这个数作为他的提成,已有提成的,不做改动
  11.        UPDATE employees
  12.        SET COMMISSION_PCT = commis_pct
  13.        WHERE hireYear = TO_CHAR(hire_date,'yyyy') AND commission_pct IS NULL;
  14.        
  15.        -- 上述范围职员的提成最大值用commis_pct参数返回
  16.        SELECT MAX(commission_pct)
  17.        INTO commis_pct
  18.        FROM employees
  19.        WHERE hireYear = TO_CHAR(hire_date,'yyyy');
  20.        
  21.        RETURN;
  22.  
  23. END proc_emp;