Liny_@NotePad

沉迷ACG中

修改Oracle 10g Express的默认端口

原本装虚拟机里的,但是每次都开虚拟机实在是太卡了,因此便下了个200+M的express。

居然默认用8080端口,和tomcat冲突,于是百度之,原来在命令窗口里输入以下即可:

call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),'/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()',8081));

同理的,修改ftp端口则是修改ftpconfig/ftp-port的text()。

Oracle居然没有默认按主键排序。。

囧死了。。按照oracle官方的说法有:

Oracle assigns a ROWNUM value to each row as it is retrieved, before rows are sorted for an ORDER BY clause, so an ORDER BY clause normally does not affect the ROWNUM of each row. However, if an ORDER BY clause causes Oracle to use an index to access the data, Oracle may retrieve the rows in a different order than without the index, so the ROWNUMs may be different than they would be without the ORDER BY clause.

好无语。。巨讨厌。。最后为每个实体类加了一个返回排序的方法,在泛型DAO里面用。无比郁闷。ORACLE真爱搞特殊化,存储过程已经能灭杀人了连排序都…… TAT。

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。

unknown Oracle major version [0]

用Hibernate实现的JPA做ORM,连接数据库时报这个错误,看来是Hibernate不知道Oracle所用的版本,

百度一下,在Hibernate配置文件里面设置hibernate.dialect属性为org.hibernate.dialect.Oracle9iDialect即可(这里使用的是9i)。

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

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

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

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

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

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;

 

PL/SQL课堂练习(匿名块)

1、普通变量声明
 1)、声明3个变量:full_name varchar2(20),salary number(9,2),fdate date
 2)、用Select into语句从employees表为上面3个变量赋值,条件是rownum <= &_rownum
 3)、用DBMS_OUTPUT.PUT_LINE()打印三个变量值,结果如:Mickel.Jordon 's salary is $4680, Joined in 1987-07-12
 4)、另外声明常量PI,NUMBER(2,7)=3.1415926,声明变量flag BOOLEAN,默认值=FALSE,声明变量age NUMBER,无默认值
 5)、打印上述变量

  1.  
  2.    full_name VARCHAR2(20);
  3.    salary NUMBER(9,2);
  4.    fdate DATE;
  5.    pi CONSTANT NUMBER(8,7) := 3.1415926;
  6.    flag BOOLEAN := FALSE;
  7.    age NUMBER;
  8.  
  9.  
  10.    SELECT first_name||'.'||last_name, salary, hire_date
  11.    INTO full_name, salary, fdate
  12.    FROM employees
  13.    WHERE ROWNUM <= &_rownum;
  14.  
  15.    DBMS_OUTPUT.PUT_LINE(full_name||' ''s salary IS $'||salary||', Joined in '||to_char(fdate,'yyyy-MM-dd'));
  16.  
  17.    DBMS_OUTPUT.PUT_LINE('pi:'||pi);
  18.  
  19.    IF flag THEN
  20.       DBMS_OUTPUT.PUT_LINE('true');
  21.    ELSE
  22.       DBMS_OUTPUT.PUT_LINE('false');
  23.    END IF;
  24.  
  25.    DBMS_OUTPUT.PUT_LINE('age:'||age);
  26.  

数据库对象练习

【HR/HR】

1、用学生选课场景创建表:
 1.1
 Student(id,sno,sname,telnum,email)
 Course(id,cno,cname,teachername)
 studentcourse(id,s_id,c_id)

  1. CREATE TABLE student(
  2. id NUMBER,
  3. sno VARCHAR2 (15) NOT NULL,
  4. sname VARCHAR2 (20) NOT NULL,
  5. telnum VARCHAR2 (12),
  6. email VARCHAR2 (50)
  7. );
  8. CREATE TABLE course(
  9. id NUMBER,
  10. cno VARCHAR2 (6) NOT NULL,
  11. cname VARCHAR2 (30) NOT NULL,
  12. teachername VARCHAR2(20)
  13. );
  14. CREATE TABLE studentcourse(
  15. id NUMBER,
  16. s_id NUMBER,
  17. c_id NUMBER
  18. );