??xml version="1.0" encoding="utf-8" standalone="yes"?> 首先在PL/Sql中分别执行: create or replace and compile java source named TestJava1 as --------------------------------------------------------------------------------------------------------- 在SQLPlus?/span> C:\Windows\System32>sqlplus nc5520110105/nc5520110105@192.168.10.87 SQL*Plus: Release 11.2.0.1.0 Production on Fri Apr 1 14:06:02 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. SQL> set serveroutput on; Call completed. SQL> PL/SQL procedure successfully completed. SQL> --------------------------------------------------------------------------------------------------------- 再看一个例子: 在PL/Sql中执行: --用Java~写Oracle存储q程?/span> --创徏存储q程 然后在SqlPlus中测试存储过E?#8212;— SQL> set serveroutput on PL/SQL procedure successfully completed. SQL> select myFunc(1,2) from dual; MYFUNC(1,2) SQL>
public class TestJava1
{
public static void test()
{
System.out.println("Hello");
}
}
create or replace procedure testJava1 as language java name 'TestJava1.test()';
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> show serveroutput;
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
SQL> call dbms_java.set_output(2000);
SQL> show serveroutput;
serveroutput ON SIZE UNLIMITED FORMAT WORD_WRAPPED
SQL> exec testJava1();
Hello
create or replace and compile java source named test as
public class MyTest
{
public static void myProc(int a,int b,int[] ret){
ret[0]=a+b;
}
public static int myFunc(int a,int b){
return a+b;
}
}
create or replace procedure myProc(a in number, b in number, ret out number) as
language java name 'MyTest.myProc(int,int,int[])';
--创徏函数
create or replace function myFunc(a in number, b in number) return number is
language java name 'MyTest.myFunc(int,int) return int';
SQL> DECLARE a INTEGER;
2 BEGIN
3 myProc(1, 2, a);
4 DBMS_OUTPUT.PUT_LINE(a);
5 END;
6 /
3
-----------
3
]]>
]]>
服务器型PLENOVO R525 G2
CPUQ至?核支持EMT64?br />
内存Q?*4GB
存储Q?*300 raid5
swap分区大小Q内?2=16*=32GB
其他分区大小Ҏ需要自行设定?br />
IP地址Q手动指?DHCP会导致oracle自检不通过)
----------------------------操作pȝ安装
介质Qubuntu-9.10-desktop-amd64.iso
基本pȝ安装完毕后,
sudo apt-get updateQ更新系l到最斎ͼ
出现盘无法挂蝲的问题,sudo fsck后解冟?br />
-----------------------------oracle数据库安?br />
---------准备介质
下蝲安装介质Q?0201_database_linux_x86_64.cpio.gz
解压Qgzip -d 10201_database_linux_x86_64.cpio.gz
解压Qcpio -idmv <10201_database_linux_x86_64.cpio.gz
解压得到Qdatabase目录
---------准备安装环境
1、安装compat libraries and 32-bit librariesQ?br />
sudo apt-get install gcc libaio1 lesstif2 lesstif2-dev make libc6 libc6-i386 libc6-dev-i386 libstdc++5 lib32stdc++6 lib32z1 ia32-libs
2、修改内核参?br />
sudo vi /etc/sysctl.confQ?br />
# add for oracle
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
vm.swappiness=10
# add for oracle
其中kernel.shmmax = 2147483648 是共享内存大,此处讄?GB?br />
3、徏立ORACLE的用户和用户l:
sudo groupadd nobody
sudo groupadd oinstall
sudo groupadd dba
sudo useradd -s /bin/bash -g oinstall -G dba oracle
sudo passwd oracle
4、sudo vi /etc/security/limits.conf
在文件末֊入:
#add for oracle
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
#add for oracle
5、库文g链接Q?br />
sudo ln -s /usr/bin/awk /bin/awk
sudo ln -s /bin/true /bin/rpm
sudo ln -s /usr/bin/basename /bin/basename
sudo ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
6、徏立oracle目录(此处路径Ҏ需要修?
sudo mkdir -p /opt/ora10
sudo chown -R oracle:oinstall /opt/ora10
sudo chmod -R 775 /opt/ora10
7、执行sudo sysctl -p 使修改生效?br />
8、修改oracle用户环境变量
以oracle用户dQsudo vi .profile
#add for oracle
export CFLAGS='-m32'
export LDFLAGS='-m32'
export ORACLE_BASE=/opt/ora10
export ORACLE_HOME=/opt/ora10
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
export ORACLE_OWNER=oracle
export ORACLE_SID=tmp
export ORACLE_TERM=xterm
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
#add for oracle
其中Q?br />
BASE和HOME路径需要与上面步骤中徏立的目录对应?br />
SID和NLS_LANGҎ需要修攏V?br />
9、oraclepȝ查:
sudo vi /etc/redhat-release
dQ?br />
Red Hat Linux release 3.1 (drupal)
10、开始安?br />
以oracle用户重新d或者source .profile
执行Q?br />
cd database
./runInstaller
开始进行安装?br />
-----------------可能会遇到的问题
1、由于某些C++的编译用C32位库文gQ导致至有一?mk文g执行不过去,暂时q没扑ֈ解决办法。不q貌g影响oracle使用Q?br />
2、安装完毕后Qdbca创徏数据库的时候报错:ORA-27125:unable to create shared memory segment
如下修改后,问题解决Q?br />
linux: # cd $ORACLE_HOME/bin
linux: # mv oracle oracle.bin
cat >oracle <<"EOF"
#!/bin/bash
export DISABLE_HUGETLBFS=1
exec $ORACLE_HOME/bin/oracle.bin $@
EOF
linux: # chmod +x oracle
]]>
automatic statistics disabled for this session
you can disable statistics in the preference menu,or obtain select
priviliges on the V$session,v$sesstat and v$statname tables
可是已经把系l权?select any table l这个用户了
解决Ҏ如下Q?/p>
grant SELECT ANY DICTIONARY to username;
因ؓv$开头的属于数据字典Q通常UCؓ动态性能视图?/p>
今天登陆到测试环?在做日常操作旉要用到dual?但是在用了一个查询语句时(SELECT to_char(current_timestamp) FROM dual)却提C?ORA-00980: 同义词{换不再有?错误,于是开始了q次的分析和恢复.
一、查扑֎?/p>
Ҏ在网上搜索得到的信息判断可能是同义词丢失或者是表被删除Q于是进行以下操作以定问题?/p>
SELECT * FROM Dba_Objects do WHERE do.object_type ='TABLE' AND do.object_name = 'DUAL'
SELECT * FROM Dba_Tables dt WHERE dt.table_name = 'DUAL'
SELECT * FROM Dba_Synonyms ds WHERE ds.table_name = 'DUAL'
Ҏ以上数据字典反馈的信息确定是表被删除(因ؓdba_synonyms表中有此记录Q表明同义词未被删除)D此错误,军_重徏该表?/p>
二、徏表操?/p>
׃在正式环境中该表存在Q故q接到正式环境查看该表结?/p>
SQL> desc dual;
Name Type Nullable Default Comments
----- ----------- -------- ------- --------
DUMMY VARCHAR2(1) Y
查看脚本Q?/p>
-- Create table
create table SYS.DUAL
(
DUMMY VARCHAR2(1)
)
tablespace SYSTEM
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 104
next 104
minextents 1
maxextents 505
pctincrease 100
);
-- Grant/Revoke object privileges
grant select on SYS.DUAL to PUBLIC;
有了以上内容Q可以开始徏表了Q因为同义词后面重新创建,所以可以在前删除,在操作之前用sys重新登陆
1、DROP PUBLIC SYNONYM dual; --删除同义?/p>
2、create table dual
(dummy varchar2(1)) --创徏?/p>
3、INSERT INTO dual VALUES('X') --插入?/p>
4、create public synonym dual for dual --创徏同义?/p>
5、grant select on dual to public with grant option --授权,如果不允许其它h可以自q权限传递给其他用户Q可以去掉with后面的内?/p>
6、退出,使用普通用L陆,试dual表是否能正常使用
select sysdate from dual;
7、若试正常则代表dual表已l被重新建立Q至此,一ơ对dual表的恢复完成?/p>
本文来自CSDN博客Q{载请标明出处Qhttp://blog.csdn.net/alvenz/archive/2008/12/15/3519532.aspx
select * from dba_registry where comp_id = 'JAVAVM'
为空,则未安装,h?$ORACLE_HOME/javavm/install/initjvm.sql安装.
创徏函数
create or replace function fn_oraclecall(mArea in VARCHAR2,mDevID in Number,mPORT in Number)
return varchar2
as
language Java name 'Caller.call(java.lang.String,Integer,Integer) return Java.lang.String';
创徏存储q程
create or replace procedure CHK_SETCAB_NUM
(mArea in VARCHAR2,mDevID in Number,mPORT in Number,v_out out varchar2) is
begin
v_out := fn_oraclecall(mArea,mDevID,mPORT);
end CHK_SETCAB_NUM;
loadjava
loadjava -u sys/sys@sid -oci8 -verbose -grant user -synonym -resolve -schema user D:\Caller.jar
--q里也可以是class文g,注意兼容oracle的jre版本
注意~写的java文g?即Caller.java的call()Ҏ,需要是staic
命名的系l异?/span> |
产生原因 |
ACCESS_INTO_NULL |
未定义对?/span> |
CASE_NOT_FOUND |
CASE 中若未包含相应的 WHEN Qƈ且没有设|?/span> ELSE ?/span> |
COLLECTION_IS_NULL |
集合元素未初始化 |
CURSER_ALREADY_OPEN |
游标已经打开 |
DUP_VAL_ON_INDEX |
唯一索引对应的列上有重复的?/span> |
INVALID_CURSOR |
在不合法的游标上q行操作 |
INVALID_NUMBER |
内嵌?/span> SQL 语句不能字W{换ؓ数字 |
NO_DATA_FOUND |
使用 select into 未返回行Q或应用索引表未初始化的元素?/span> |
TOO_MANY_ROWS |
执行 select into Ӟl果集超q一?/span> |
ZERO_DIVIDE |
除数?/span> 0 |
SUBSCRIPT_BEYOND_COUNT |
元素下标过嵌套表或 VARRAY 的最大?/span> |
SUBSCRIPT_OUTSIDE_LIMIT |
使用嵌套表或 VARRAY Ӟ下标指定ؓ负数 |
VALUE_ERROR |
赋值时Q变量长度不以容纳实际数据 |
LOGIN_DENIED |
PL/SQL 应用E序q接?/span> oracle 数据库时Q提供了不正的用户名或密码 |
NOT_LOGGED_ON |
PL/SQL 应用E序在没有连?/span> oralce 数据库的情况下访问数?/span> |
PROGRAM_ERROR |
PL/SQL 内部问题Q可能需要重装数据字典& pl./SQL pȝ?/span> |
ROWTYPE_MISMATCH |
宿主游标变量?/span> PL/SQL 游标变量的返回类型不兼容 |
SELF_IS_NULL |
使用对象cdӞ?/span> null 对象上调用对象方?/span> |
STORAGE_ERROR |
q行 PL/SQL Ӟ出内存I间 |
SYS_INVALID_ID |
无效?/span> ROWID 字符?/span> |
TIMEOUT_ON_RESOURCE |
Oracle 在等待资源时时 |
Following the collapse of talks with IBM earlier this month Oracle has stepped in to acquire Sun Microsystems for $7.4bn or $9.50 a share in an all cash transaction. This is a substantially higher valuation than IBM’s rumored price of $6.85bn. In a statement Oracle claims that the boards of both firms have approved the deal which is expected to complete in the summer subject to regulatory approval. Oracle CEO Larry Ellison stated:
"The acquisition of Sun transforms the IT industry, combining best-in-class enterprise software and mission-critical computing systems. Oracle will be the only company that can engineer an integrated system - applications to disk - where all the pieces fit and work together so customers do not have to do it themselves. Our customers benefit as their systems integration costs go down while system performance, reliability and security go up."
The deal offers substantial additional revenue to Oracle, according President Safra Catz:
"We expect this acquisition to be accretive to Oracle's earnings by at least 15 cents on a non-GAAP basis in the first full year after closing. We estimate that the acquired business will contribute over $1.5 billion to Oracle's non-GAAP operating profit in the first year, increasing to over $2 billion in the second year. This would make the Sun acquisition more profitable in per share contribution in the first year than we had planned for the acquisitions of BEA, PeopleSoft and Siebel combined,"
There is currently very limited information available as to what Oracle plans to do with either the hardware business the drives much of Sun’s revenue, Sun’s open source software offerings such as MySQL, GlassFish, NetBeans and JavaFX, or the Java Community Process which has been central to the way Sun has managed Java's evolution, but both Sun Chairman Scott McNealy and Sun's CEO Jonathan Schwartz have issued upbeat statements. Jonathan Schwartz has been quoted as saying:
"This is a fantastic day for Sun's customers, developers, partners and employees across the globe, joining forces with the global leader in enterprise software to drive innovation and value across every aspect of the technology marketplace," said Jonathan Schwartz, Sun's CEO, "From the Java platform touching nearly every business system on earth, powering billions of consumers on mobile handsets and consumer electronics, to the convergence of storage, networking and computing driven by the Solaris operating system and Sun's SPARC and x64 systems. Together with Oracle, we'll drive the innovation pipeline to create compelling value to our customer base and the marketplace."
Sun is the latest in a number of large scale acquisitions for Oracle. In recent years the enterprise computing giant has also acquired Siebel, PeopleSoft and BEA Systems. If Oracle is able to sell Sun's hardware business on, perhaps to Fujitsu, Oracle will have made an important acquisition as a very low price.
数据字典里存有用户信息、用L权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视囄。我们不能手工修Ҏ据字兔R的信息。很多时候,一般的ORACLE用户不知道如何有效地利用它?/p>
dictionary 全部数据字典表的名称和解释,它有一个同义词dict
dict_column 全部数据字典表里字段名称和解?br />
如果我们x询跟索引有关的数据字典时Q可以用下面q条SQL语句:
SQL>select * from dictionary where instr(comments,'index')>0;
如果我们想知道user_indexes表各字段名称的详l含义,可以用下面这条SQL语句:
SQL>select column_name,comments from dict_columns where
table_name='USER_INDEXES';
依此cLQ就可以L知道数据字典的详l名U和解释Q不用查看ORACLE的其它文档资料了?br />
下面按类别列Z些ORACLE用户常用数据字典的查询用方法?br />
一、用?/p>
查看当前用户的缺省表I间
SQL>select username,default_tablespace from user_users;
查看当前用户的角?br />
SQL>select * from user_role_privs;
查看当前用户的系l权限和表权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
二、表
查看用户下所有的?br />
SQL>select * from user_tables;
查看名称包含log字符的表
SQL>select object_name,object_id from user_objects where instr(object_name,'LOG')>0;
查看某表的创建时?
SQL>select object_name,created from user_objects where object_name=upper
('&table_name');
查看某表的大?br />
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where
segment_name=upper('&table_name');
查看攑֜ORACLE的内存区里的?nbsp;
SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
三、烦?br />
查看索引个数和类?br />
SQL>select index_name,index_type,table_name from user_indexes order by table_name;
查看索引被烦引的字段
SQL>select * from user_ind_columns where index_name=upper('&index_name');
查看索引的大?br />
SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments where
segment_name=upper('&index_name');
四、序列号
查看序列Plast_number是当前?br />
SQL>select * from user_sequences;
五、视?br />
查看视图的名U?br />
SQL>select view_name from user_views;
查看创徏视图的select语句
SQL>select view_name,text_length from user_views;
SQL>set long 2000;说明Q可以根据视囄text_lengthD定set long 的大?br />
SQL>select text from user_views where view_name=upper('&view_name');
六、同义词
查看同义词的名称
SQL>select * from user_synonyms;
七、约束条?br />
查看某表的约束条?br />
SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from
user_constraints where table_name = upper('&table_name');
SQL>select c.constraint_name,c.constraint_type,cc.column_name
from user_constraints c,user_cons_columns cc
where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
and c.owner = cc.owner and c.constraint_name = cc.constraint_name
order by cc.position;
八、存储函数和q程
查看函数和过E的状?br />
SQL>select object_name,status from user_objects where object_type='FUNCTION';
SQL>select object_name,status from user_objects where object_type='PROCEDURE';
查看函数和过E的源代?br />
SQL>select text from all_source where owner=user and name=upper('&plsql_name');
九、触发器
查看触发?br />
set long 50000;
set heading off;
set pagesize 2000;
select
'create or replace trigger "' ||
trigger_name || '"' || chr(10)||
decode( substr( trigger_type, 1, 1 ),
'A', 'AFTER', 'B', 'BEFORE', 'I', 'INSTEAD OF' ) ||
chr(10) ||
triggering_event || chr(10) ||
'ON "' || table_owner || '"."' ||
table_name || '"' || chr(10) ||
decode( instr( trigger_type, 'EACH ROW' ), 0, null,
'FOR EACH ROW' ) || chr(10) ,
trigger_body
from user_triggers;
本脓来自天极|群乐社?-http://q.yesky.com/group/review-17556508.html
CREATE USER "TEST" PROFILE "DEFAULT"
IDENTIFIED BY "test" DEFAULT TABLESPACE "TEST" ;
grant connect,resource,dba to "someuser" with admin option;
查看当前用户的缺省表I间
SQL>select username,default_tablespace from user_users;
查看当前用户的角?br /> SQL>select * from user_role_privs;
查看当前用户的系l权限和表权限
SQL>select * from user_sys_privs;
SQL>select * from user_tab_privs;
查看所有用?br />
SQL>select username from all_users;
C:\Documents and Settings\Administrator>emca -config dbcontrol db
EMCA 开始于 2009-2-24 17:04:05
EM Configuration Assistant 10.2.0.1.0 正式?br />
版权所?(c) 2003, 2005, Oracle。保留所有权利?/p>
输入以下信息:
数据?SID: orcl
已ؓ数据?orcl 配置?Database Control
您已选择配置 Database Control, 以便理数据?orcl
此操作将Ud现有配置和默认设|? q新执行配|?br />
是否l箋? [yes(Y)/no(N)]: y
监听E序端口? 1521
SYS 用户的口?
DBSNMP 用户的口?
SYSMAN 用户的口?
SYSMAN 用户的口? 通知的电子邮件地址 (可?: vipzhour@163.com
通知的发?(SMTP) 服务?(可?:
-----------------------------------------------------------------
已指定以下设|?/p>
数据?ORACLE_HOME ................ D:\oracle\product\10.2.0\db_1
数据库主机名 ................ cst-server
监听E序端口?................ 1521
数据?SID ................ orcl
通知的电子邮件地址 ............... vipzhour@163.com
通知的发?(SMTP) 服务?...............
-----------------------------------------------------------------
是否l箋? [yes(Y)/no(N)]: y
2009-2-24 17:06:50 oracle.sysman.emcp.EMConfig perform
信息: 正在此操作记录?D:\oracle\product\10.2.0\db_1\cfgtoollogs\emca\orcl\emc
a_2009-02-24_05-04-05-下午.log?br />
2009-2-24 17:06:57 oracle.sysman.emcp.util.DBControlUtil stopOMS
信息: 正在停止 Database Control (此操作可能需要一D|?...
Q?Q用客户端连接到数据库,执行select * from v$instance
查看version?/p>
Q?Qselect * from product_component_version
Q?Q或查询V$VERSION查看lgU信?/p>
主要原因是表I间不够,其讄动扩展即可?/p>
alter database datafile 'D:\oracle\product\10.2.0\oradata\oracle\perfstat.dbf' autoextend on;
或者可以在创徏perfstat表空间的时候进行设|:
create tablespace perfstat
datafile 'D:\oracle\product\10.2.0\oradata\oracle\perfstat.dbf' size 100m autoextend on
extend management local;
--条g1 UPDATE Personnel SET salary = salary * 0.9 WHERE salary >= 5000; --条g2 UPDATE Personnel SET salary = salary * 1.15 WHERE salary >= 2000 AND salary < 4600;
UPDATE Personnel SET salary = CASE WHEN salary >= 5000 THEN salary * 0.9 WHEN salary >= 2000 AND salary < 4600 THEN salary * 1.15 ELSE salary END;
p_key | col_1 | col_2 |
a | 1 | 张三 |
b | 2 | 李四 |
c | 3 | 王五 |
a
?code>b怺交换。用Case函数来实现的话,代码如下 UPDATE SomeTable SET p_key = CASE WHEN p_key = 'a' THEN 'b' WHEN p_key = 'b' THEN 'a' ELSE p_key END WHERE p_key IN ('a', 'b');
--使用IN的时?/span>
SELECT keyCol,
CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
--使用EXISTS的时?/span>
SELECT keyCol,
CASE WHEN EXISTS ( SELECT * FROM tbl_B
WHERE tbl_A.keyCol = tbl_B.keyCol )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
学号(std_id) | 评ID(class_id) | 评?class_name) | MflagQmain_class_flg) |
100 | 1 | l济?/td> | Y |
100 | 2 | 历史?/td> | N |
200 | 2 | 历史?/td> | N |
200 | 3 | 考古?/td> | Y |
200 | 4 | 计算?/td> | N |
300 | 4 | 计算?/td> | N |
400 | 5 | 化学 | N |
500 | 6 | 数学 | N |
--条g1Q只选择了一门课E的学生 SELECT std_id, MAX(class_id) AS main_class FROM Studentclass GROUP BY std_id HAVING COUNT(*) = 1;
STD_ID MAIN_class
------ ----------
300 4
400 5
500 6
--条g2Q选择多门评的学?/span>
SELECT std_id, class_id AS main_class
FROM Studentclass
WHERE main_class_flg = 'Y' ;
STD_ID MAIN_class
------ ----------
100 1
200 3
SELECT std_id, CASE WHEN COUNT(*) = 1 --只选择一门课E的学生的情?/span> THEN MAX(class_id) ELSE MAX(CASE WHEN main_class_flg = 'Y' THEN class_id ELSE NULL END ) END AS main_class FROM Studentclass GROUP BY std_id;
STD_ID MAIN_class
------ ----------
100 1
200 3
300 4
400 5
500 6
CASE col_1 WHEN 1 THEN 'Right' WHEN NULL THEN 'Wrong' END