社区
基础和管理
帖子详情
ERROR 位于第 1 行: ORA-04089: 无法对 SYS 所有的对象创建触发器 这是为什么?
okop
2003-10-21 12:26:22
ERROR 位于第 1 行:
ORA-04089: 无法对 SYS 所有的对象创建触发器
...全文
241
3
打赏
收藏
ERROR 位于第 1 行: ORA-04089: 无法对 SYS 所有的对象创建触发器 这是为什么?
ERROR 位于第 1 行: ORA-04089: 无法对 SYS 所有的对象创建触发器
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mosaic
2003-10-21
打赏
举报
回复
sys用户的数据库对象上不能创建触发器
jiezhi
2003-10-21
打赏
举报
回复
語句有問題。觸發器應該是建立在你的某個用戶表上的。
Drate
2003-10-21
打赏
举报
回复
ORA-04089 cannot create triggers on objects owned by SYS
Cause: An attempt was made to create a trigger on an object owned by SYS.
Action: Do not create triggers on objects owned by SYS.
你的这个触发器不能用SYS用户来建,因为它会建在系统表空间中,要建的话,只能在用户表空间中建才行
ora
cle实验报告
实验一 SQL*PLUS练习 【实验目的】 (1) 了解
Ora
cle的工作环境和基本使用方法。 (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验内容】 一、 准备使用SQL*PLUS 1. 进入SQL*PLUS 2. 退出SQL*PLUS 3. 显示表结构命令DESCRIBE SQL>DESCRIBE emp 使用DESCRIBE(缩写DESC)可以列出指定表的基本结构,包括各字段的字段名以及类型、长度、是否非空等信息。 4. 使用SQL*PLUS显示数据库中EMP表的内容 输入下面的查询语句: SQL>SELECT * FROM emp; 按下回车键执
行
查询 5. 执
行
命令文件 START或@命令将指定文件调入SQL缓冲区中,并执
行
文件内容。 SQL>@ 文件名(文件后缀缺省为.SQL)或 SQL>START 文件名 文件中每条SQL语句顺序装入缓冲区并执
行
。 二、 数据库命令——有关表、视图等的操作 1.
创建
表employee 例1 定义一个人事信息管理系统中存放职工基本信息的一张表。可输入如下命令: SQL>CREATE TABLE employee (empno number(6) PRIMARY KEY, /* 职工编号 name varchar2(10) NOT NULL, /* 姓名 deptno number(2) DEFAULT 10, /* 部门号 salary number(7,2) CHECK(salarycreate table emp2 as select * from emp where 1=2; 在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何数据到新表中去。另外,还可以复制一个表的部分列定义或部分列定义及其数据。 三、
Ora
cle数据库数据查询 1、单表查询 2、多表查询 四、 SQL*PLUS常用命令 表1 常用报表格式化名命令 命令 定义 Btitle 为报表的每一页设置底端标题 Column 设置列的标题和格式 Compute 让SQL*PLUS计算各种值 Remark 将某些字标记为注释 Set linesize 设置报表的
行
宽字符数 Set newpage 设置报表各页之间的
行
数 Spool 使SQL*PLUS将输出写入文件中 Start 使SQL*PLUS执
行
一个sql文件 Ttitle 设置报表每页的头标题 Break 让SQL*PLUS进
行
分组操作 例3 建立一个批命令文件对查询到的数据以报表的形式输出并将其保存到指定的文件中。 处理方法:利用SQL*PLUS语言工具(也可以使用其他文本编辑器)建立批命令的.SQL文件。在“SQL>”提示符下,使用EDIT命令在”E:\”中建立SCGB.SQL文件。 SCGB.SQL文件中的命令组如下: SQL>EDIT E:\ SCGB.SQL SET echo off SET pagesize 30 SET linesize 75 TTITLE’2008年4月10号’CE’公司职员基本情况登记表’R’Page:’ FORMAT 99- >SQL.PNO SKIP 1 CE’===========================’ BTITLE COL 60 ’制标单位’ TAB 3 ‘人事部’ COLUMN empno heading ‘职工|编号’ COLUMN ename format a10 heading ‘姓 名’ COLUMN job heading ‘工 种’ COLUMN sal format $99,990 heading 工 资’ COLUMN comm Like sal heading ‘奖 金’ COLUMN deptno format 9999 heading ‘部门|编号’ COLUMN hiredate heading ‘参加工作时间’ SPOOL e:\sjbb /*在E盘中建立格式报表输出文件,默认属性为LST BREAK on deptno skip 1 COMPUTE sum of sal comm on deptno SELECT empno,ename,job,hiredate,sal,comm,deptno from emp ORDER BY deptno,sal; SPOOL off /*终止SPOOL功能,关闭其文件。注意,此命令不可省,否则将建立空文件。 五、 实验内容 1、以cs+学号为用户名
创建
用户,并授予用户
创建
数据
对象
的权限。 2、复制emp表,复制表名为emp_学号,然后将emp表中工资低于$2000 的职工插入到复制的表中。 3、对复制的emp表插入一
行
只包含有职工号,职工名,工资与部门号四个数据 项值的记录。 4、在复制的emp表中将雇员ALLEN提升为经理,工资增至$2500, 奖(佣 )金增加40%。 5、删除复制的emp表中工资低于500的记录
行
。 6、列出10号部门中既不是经理,也不是秘书的职工的所有信息。 7、查找出部门所在地是CHICAGO的部门的职工姓名、工资和工种。 8、统计各部门中各工种的人数、工资总和及奖金总和。 9、查找出工资比其所在部门平均工资高的职工姓名、工种与工资情况。 实验3
Ora
cle数据库开发环境下PL/SQL编程 【实验目的】 (1)掌握 PL/SQL 的基本使用方法。 (2)在SQL*PLUS环境下运
行
PL/SQL的简单程序。 (3)应用 PL/SQL 解决实际问题 【实验内容与步骤】 PL/SQL块中的可执
行
部分是由一系列语句组成的(包括对数据库进
行
操作的SQL语句,PL/SQL语言的各种流程控制语句等)。在块中对数据库查询,增、删、改等对数据的操作是由SQL命令完成的。在PL/SQL块中,可以使用SQL的数据查询命令,数据操纵命令和事务控制命令。可使用全部SQL函数。PL/SQL中的SQL语句,可使用SQL的比较操作等运算符。但不能使用数据定义语句。 在PL/SQL块中使用SELECT语句时注意几点: (1)SELECT语句必须含有INTO子句。 (2)INTO子句后的变量个数和位置及数据类型必须和SELECT命令后的字段名表相同。 (3)INTO子句后可以是简单类型变量或组合类型变量。 (4)SELECT语句中的WHERE条件可以包含PL/SQL块中定义的变量及表达式,但变量名不要同数据库表列名相同。 (5)在未使用显式游标的情况下,使用SELECT语句必须保证只有一条记录返回,否则会产生异常情况。 [例3-1] 问题:编写一个过程,求和运算。 SET SERVEROUTPUT ON; DECLARE a number:=1; BEGIN a:=a+5; DBMS_OUTPUT.PUT_LINE('和为:'||TO_CHAR(a)); END; / 【例3-2】:使用%TYPE声明变量,输出制定表中的相关信息。 DECLARE my_name student.sname%TYPE; BEGIN SELECT sname INTO my_name FROM student WHERE no=’01203001’; DBMS_OUTPUT.PUT_LINE(my_name); END; / 【例3-3】问题:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。 declare v_sal emp.sal%type; begin select sal into v_sal from emp where ename=spName; if v_sal :NEW.sal THEN DBMS_OUTPUT.PUT_LINE('工资减少'); ELSIF :OLD.sal < :NEW.sal THEN DBMS_OUTPUT.PUT_LINE('工资增加'); ELSE DBMS_OUTPUT.PUT_LINE('工资未作任何变动'); END IF; DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.sal); DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.sal); END; / --执
行
UPDATE查看效果 UPDATE emp SET sal = 3000 WHERE empno = '7788'; 6、需要对在表上进
行
DML操作的用户进
行
安全检查,看是否具有合适的特权。 Create table foo(a number); Create trigger biud_foo Before insert or update or delete On foo Begin If user not in (‘DONNY’) then Raise_application_
error
(-20001, ‘You don’t have access to modify this table.’); End if; End; / 即使
SYS
,
SYS
TEM用户也不能修改foo表。 2、 利用PL/SQL编写程序实现下列
触发器
1)、编写一个数据库
触发器
,当任何时候某个部门从dept表中删除时,该
触发器
将从emp表中删除该部门的所有雇员。(要求:emp表、dept表均为复制后的表) 2)、
创建
一个
触发器
,当客户下完订单后,自动统计该订单的所有图书的价格总额。 3)、
创建
一个
触发器
,禁止客户在非工作时间(早上8:00前,晚上17:00后)下订单。 五、实验心得
ORA
-
04089
:
无法
对
SYS
拥有的
对象
创建
触发器
——错误原因和解决方案
1.错误原因 此错误原因是:
sys
拥有的
对象
大部分是数据字典,在数据字典之上
创建
trigger会令数据字典的修改不正常,严重会导致数据库被破坏,因此禁止对
sys
拥有的
对象
创建
触发器
。 2.解决方案 解决方案便是
创建
一个普通user,将之前需要
创建
触发器
的table转到普通user的表空间下,即可成功
创建
trigger。 (1)首先为新的user
创建
tablespace(表空间) create tablespace zxf datafile 'D:\
Ora
cle19c\
ora
data\ORCLDB\zxf.d
ORA
-
04089
: 没法对
SYS
拥有的
对象
创建
触发器
ORA
-
04089
:
无法
对
SYS
拥有的
对象
创建
触发器
大家下,我在
sys
下
创建
了一个student表,现在想在这个表上
创建
一个
触发器
,实现的功能是:如果删除student上的id=11的记录,则弹出'不允许删除!'的提示。代码如下:createorreplacetriggerstudent_deleteafterdeleteonstudentforeach...
nested exception is java.sql.SQLSyntax
Error
Exception:
ORA
-02289: 序列不存在(详细讲解)
nested exception is java.sql.SQLSyntax
Error
Exception:
ORA
-02289: 序列不存在(本人详细的讲解本人处理的经过结果) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201216183250773.png?x-oss-process=image/watermark,type_Zm
这是
我报错的idea的conslie: 一开始解决的时候就直接看了报错去百度了,自己并没有认真的去看,为什么报错;经过百度一波之后,
ora
cle04052,案例学习
Ora
cle错误:
ORA
-04052
原文:
ORA
-04052
error
occurred when looking up remote object stringstringstringstringstringCause An
error
has occurred when trying to look up a remote object.Action Fix the
error
. Make sure the remote da...
基础和管理
17,377
社区成员
95,128
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章