在这篇文章中,我们将带领您了解sql–dba_jobs_running:尝试从过程访问时,表或视图不存在的全貌,包括过程已请求访问一对象的相关情况。同时,我们还将为您介绍有关"ORA-00942:表或
在这篇文章中,我们将带领您了解sql – dba_jobs_running:尝试从过程访问时,表或视图不存在的全貌,包括过程已请求访问一对象的相关情况。同时,我们还将为您介绍有关"ORA-00942: 表或视图不存在 "的原因和解决方法、"ORA-00942: 表或视图不存在" 的原因和解决方法、dba_job dba_schedule_jobs、dba_jobs_running:尝试从过程中访问时,表或视图不存在的知识,以帮助您更好地理解这个主题。
本文目录一览:- sql – dba_jobs_running:尝试从过程访问时,表或视图不存在(过程已请求访问一对象)
- "ORA-00942: 表或视图不存在 "的原因和解决方法
- "ORA-00942: 表或视图不存在" 的原因和解决方法
- dba_job dba_schedule_jobs
- dba_jobs_running:尝试从过程中访问时,表或视图不存在
sql – dba_jobs_running:尝试从过程访问时,表或视图不存在(过程已请求访问一对象)
select * from dba_jobs_running;
在我的sqldevelopers sql控制台中执行时工作正常.
但是,当在过程中具有完全相同的语句时,它不起作用.
编译失败
PL/sql: ORA-00942: table or view does not exist
有任何想法吗?是否有类似的范围需要考虑?
任何建议都非常感谢,提前谢谢:)
解决方法
编辑:
从过程中执行SELECT需要从过程外部(例如在sql-Developer中)执行SELECT的略微不同的权限.拥有过程的用户必须已明确授予对表或视图的权限…如果从视图外部运行查询,则不是这种情况(例如,您可以通过角色授予权限)
您需要以SYS身份连接并转到:
GRANT SELECT ON SYS.DBA_JOBS_RUNNING TO <user-that-owns-proc>;
"ORA-00942: 表或视图不存在 "的原因和解决方法
错误原因:在Oracle新建了一个表,名为“QueryHistory",用来保存用户的查询记录,这时,再用"Select * from QueryHistory"来查询,报 "ORA-00942: 表或视图不存在 "
错误分析:利用Google搜索,找到了原因:
oracle是大小写敏感的,如果定义表名称或列名称的时候没有用引号引起来的话 oracle会把他们全部转换为大写,这时就会出现错误了.
解决方法:
将语句改为"Select * from "QueryHistory" 或是语句全部大写
"ORA-00942: 表或视图不存在" 的原因和解决方法
1、问题产生的原因
Oracle 是大小写敏感的,我们创自己写Sql脚本创建表的时候Oracle会自动将我们的表名,字段名转成大写。
2、问题分析
但是 Oracle 同样支持"" 语法,将表名或字段名加上""后,Oracle不会将其转换成大写。
如果加上了"",那么我们采用一般的SQL语句查询则会产生“ORA-00942: 表或视图不存在 ”,因此SQL脚本中需要将表名也加上""。例如:
select * from "LDUser";
这种情况在我们手写SQL的时候一般不会发生,但是我们使用powerdesigner设计数据库的时候,由于不注意会经常出现此类问题,因为Powerdesigner生成的SQL文件默认是加""的。
3、解决的办法
因为我们使用的是Powerdesigner,所以可以不用手工改写SQL脚本,只要设置Powerdesigner重新生成即可。
在PowerDesiger中,在physical data model 中找到菜单中的Database下的Edit current DBMS中,
选择Script->Sql->Format,有一项CaseSensitivityUsingQuote,它的comment为“Determines if the case sensitivity for identifiers is managed using double quotes”,
表示是否适用双引号来规定标识符的大小写,可以看到右边的values默认值为“YES”,改为“No”,点击【应用】按钮。
这样再生成sql语句时,表和字段名上是没有引号了。
dba_job dba_schedule_jobs
DBMS_JOB和DBMS_SCHEDULER都是Oracle提供的程序包,都可以用来创建、管理job,其中DBMS_SCHEDULER的功能更为强大。先解释scheduler的基础概念,scheduler 包含了以下几个实体对象:
Program -- 提供了scheduler 将要运行什么,包含program name,program type(PL/SQ块、存储过程、外部程序),program action(具体的程序实体,比如说一个PL/SQL块、或者是存储过程的名称、或者是外部程序的路径加名称) 。
Schedules -- 指定何时何种频率来运行job,可以被不同的job重复的利用。比如说我有两个job都要求在每天的凌晨4点运行,那么两个job可以同时指定相同的schedule。
Jobs -- 具体的作业的名称,依赖于那个program、schedule。也可以不指定program、schedule,而直接写入program、schedule的相应参数。
另外,需要注意的是,通过DBMS_JOB和DBMS_SCHEDULER创建的job信息存储在不同的数据字典中,其中,通过DBMS_JOB创建的job信息存储在user_jobs,而通过DBMS_SCHEDULER创建的job信息存储在user_scheduler_jobs中。
下面,分别使用DBMS_JOB和DBMS_SCHEDULER来创建job。
使用DBMS_JOB
1.创建测试表
点击(此处)折叠或打开
SQL> create table hoegh(h1 date);
Table created
SQL>
2.创建存储过程,向hoegh表中插入一条数据
点击(此处)折叠或打开
SQL>
SQL> create or replace procedure pro_hoegh is
2 begin
3 insert into hoegh values(sysdate);
4 COMMIT;
5 end pro_hoegh;
6 /
Procedure created
SQL>
3.创建job
点击(此处)折叠或打开
SQL>
SQL> variable job1 number
SQL> begin
2 dbms_job.submit(:job1,\''pro_hoegh;\'',sysdate,\''sysdate+1/1440\'');--每天1440分钟,即一分钟运行test过程一次
3 end;
4 /
PL/SQL procedure successfully completed
job1
---------
1
SQL>
4.执行job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_job.run(:job1);
3 end;
4 /
PL/SQL procedure successfully completed
job1
---------
1
SQL>
两分钟后,查询测试表,确认job是否正常执行
点击(此处)折叠或打开
SQL> select to_char(h1,\''yyyy-mm-dd HH24:mi:ss\'') H1 from hoegh;
H1
-------------------
2015-04-28 16:08:23
2015-04-28 16:07:21
SQL>
5.停止job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_job.broken(1,true);
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
其中,1是创建job是定义的变量值,可以唯一标识一个job
6.启用job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_job.broken(1,false);
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
7.删除job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_job.remove(1);
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
使用DBMS_SCHEDULER
1.创建测试表
点击(此处)折叠或打开
SQL> create table hoegh(h1 date);
Table created
SQL>
2.创建存储过程,向hoegh表中插入一条数据
点击(此处)折叠或打开
SQL>
SQL> create or replace procedure pro_hoegh is
2 begin
3 insert into hoegh values(sysdate);
4 COMMIT;
5 end pro_hoegh;
6 /
Procedure created
SQL>
3.创建schedule
在schedule中定义了schedule名称、起止时间、调用间隔等参数。
点击(此处)折叠或打开
SQL>
SQL> begin
2 -- create_schedule
3 dbms_scheduler.create_schedule(schedule_name => \''schedule_hoegh\'',
4 start_date => \''28-4月 -15 4.30.00.000 下午\'',
5 repeat_interval => \''FREQ=MINUTELY; INTERVAL=1\'',
6 end_date => \''29-4月 -15 4.30.00.000 下午\'',
7 comments => \''TEST schedule\'');
8 end;
9 /
PL/SQL procedure successfully completed
SQL>
4.创建program
在program中定义了程序的类型、具体操作、参数个数等参数
点击(此处)折叠或打开
SQL>
SQL> begin
2 -- create_program
3 dbms_scheduler.create_program(program_name => \''program_hoegh\'',
4 program_type => \''PLSQL_BLOCK\'',
5 program_action => \''BEGIN PRO_HOEGH; END;\'',
6 number_of_arguments => 0,
7 enabled => TRUE,
8 comments => \''TEST program\'');
9 end;
10 /
PL/SQL procedure successfully completed
SQL>
5.创建job
在job中指定了job_name,以及相关联的program_name、schedule_name等参数。
点击(此处)折叠或打开
SQL>
SQL> begin
2 -- create_job
3 dbms_scheduler.create_job(job_name => \''job_hoegh\'',
4 program_name => \''program_hoegh\'',
5 schedule_name => \''schedule_hoegh\'',
6 job_class => \''DEFAULT_JOB_CLASS\'',
7 enabled => true,
8 auto_drop => true,
9 comments => \''TEST procedure\'');
10 end;
11 /
PL/SQL procedure successfully completed
SQL>
6.执行job
点击(此处)折叠或打开
SQL>
SQL> begin
2 -- Call the procedure
3 dbms_scheduler.run_job(job_name => \''job_hoegh\'',
4 use_current_session => false);
5 end;
6 /
PL/SQL procedure successfully completed
SQL>
几分钟后,查询测试表,确认job是否正常执行
点击(此处)折叠或打开
SQL> select to_char(h1,\''yyyy-mm-dd HH24:mi:ss\'') H1 from hoegh;
H1
-------------------
2015-04-28 16:30:00
2015-04-28 16:31:00
2015-04-28 16:32:00
2015-04-28 16:24:25
SQL>
7.禁用job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_scheduler.disable(\''job_hoegh\'');
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
SQL> select job_name,enabled,state from user_scheduler_jobs;
JOB_NAME ENABLED STATE
------------------------------ ------- ---------------
JOB_HOEGH FALSE DISABLED
SQL>
8.启用job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_scheduler.enable(\''job_hoegh\'');
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
SQL> select job_name,enabled,state from user_scheduler_jobs;
JOB_NAME ENABLED STATE
------------------------------ ------- ---------------
JOB_HOEGH TRUE SCHEDULED
SQL>
9.删除job
点击(此处)折叠或打开
SQL>
SQL> begin
2 dbms_scheduler.drop_job(\''job_hoegh\'');
3 end;
4 /
PL/SQL procedure successfully completed
SQL>
SQL> select job_name,enabled,state from user_scheduler_jobs;
JOB_NAME ENABLED STATE
------------------------------ ------- ---------------
SQL>
DBMS_JOB和DBMS_SCHEDULER都是Oracle提供的程序包,都可以用来创建、管理job,其中DBMS_SCHEDULER的功能更为强大。先解释scheduler的基础概念,scheduler 包含了以下几个实体对象:
- Program -- 提供了scheduler 将要运行什么,包含program name,program type(PL/SQ块、存储过程、外部程序),program action(具体的程序实体,比如说一个PL/SQL块、或者是存储过程的名称、或者是外部程序的路径加名称) 。
- Schedules -- 指定何时何种频率来运行job,可以被不同的job重复的利用。比如说我有两个job都要求在每天的凌晨4点运行,那么两个job可以同时指定相同的schedule。
- Jobs -- 具体的作业的名称,依赖于那个program、schedule。也可以不指定program、schedule,而直接写入program、schedule的相应参数。
另外,需要注意的是,通过DBMS_JOB和DBMS_SCHEDULER创建的job信息存储在不同的数据字典中,其中,通过DBMS_JOB创建的job信息存储在user_jobs,而通过DBMS_SCHEDULER创建的job信息存储在user_scheduler_jobs中。
下面,分别使用DBMS_JOB和DBMS_SCHEDULER来创建job。
使用DBMS_JOB
1.创建测试表
点击(此处)折叠或打开
- SQL> create table hoegh(h1 date);
- Table created
- SQL>
2.创建存储过程,向hoegh表中插入一条数据
点击(此处)折叠或打开
- SQL>
- SQL> create or replace procedure pro_hoegh is
- 2 begin
- 3 insert into hoegh values(sysdate);
- 4 COMMIT;
- 5 end pro_hoegh;
- 6 /
- Procedure created
- SQL>
3.创建job
点击(此处)折叠或打开
- SQL>
- SQL> variable job1 number
- SQL> begin
- 2 dbms_job.submit(:job1,\''pro_hoegh;\'',sysdate,\''sysdate+1/1440\'');--每天1440分钟,即一分钟运行test过程一次
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- job1
- ---------
- 1
- SQL>
4.执行job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_job.run(:job1);
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- job1
- ---------
- 1
- SQL>
两分钟后,查询测试表,确认job是否正常执行
点击(此处)折叠或打开
- SQL> select to_char(h1,\''yyyy-mm-dd HH24:mi:ss\'') H1 from hoegh;
- H1
- -------------------
- 2015-04-28 16:08:23
- 2015-04-28 16:07:21
- SQL>
5.停止job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_job.broken(1,true);
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
其中,1是创建job是定义的变量值,可以唯一标识一个job
6.启用job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_job.broken(1,false);
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
7.删除job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_job.remove(1);
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
使用DBMS_SCHEDULER
1.创建测试表
点击(此处)折叠或打开
- SQL> create table hoegh(h1 date);
- Table created
- SQL>
2.创建存储过程,向hoegh表中插入一条数据
点击(此处)折叠或打开
- SQL>
- SQL> create or replace procedure pro_hoegh is
- 2 begin
- 3 insert into hoegh values(sysdate);
- 4 COMMIT;
- 5 end pro_hoegh;
- 6 /
- Procedure created
- SQL>
3.创建schedule
在schedule中定义了schedule名称、起止时间、调用间隔等参数。
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 -- create_schedule
- 3 dbms_scheduler.create_schedule(schedule_name => \''schedule_hoegh\'',
- 4 start_date => \''28-4月 -15 4.30.00.000 下午\'',
- 5 repeat_interval => \''FREQ=MINUTELY; INTERVAL=1\'',
- 6 end_date => \''29-4月 -15 4.30.00.000 下午\'',
- 7 comments => \''TEST schedule\'');
- 8 end;
- 9 /
- PL/SQL procedure successfully completed
- SQL>
4.创建program
在program中定义了程序的类型、具体操作、参数个数等参数
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 -- create_program
- 3 dbms_scheduler.create_program(program_name => \''program_hoegh\'',
- 4 program_type => \''PLSQL_BLOCK\'',
- 5 program_action => \''BEGIN PRO_HOEGH; END;\'',
- 6 number_of_arguments => 0,
- 7 enabled => TRUE,
- 8 comments => \''TEST program\'');
- 9 end;
- 10 /
- PL/SQL procedure successfully completed
- SQL>
5.创建job
在job中指定了job_name,以及相关联的program_name、schedule_name等参数。
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 -- create_job
- 3 dbms_scheduler.create_job(job_name => \''job_hoegh\'',
- 4 program_name => \''program_hoegh\'',
- 5 schedule_name => \''schedule_hoegh\'',
- 6 job_class => \''DEFAULT_JOB_CLASS\'',
- 7 enabled => true,
- 8 auto_drop => true,
- 9 comments => \''TEST procedure\'');
- 10 end;
- 11 /
- PL/SQL procedure successfully completed
- SQL>
6.执行job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 -- Call the procedure
- 3 dbms_scheduler.run_job(job_name => \''job_hoegh\'',
- 4 use_current_session => false);
- 5 end;
- 6 /
- PL/SQL procedure successfully completed
- SQL>
几分钟后,查询测试表,确认job是否正常执行
点击(此处)折叠或打开
- SQL> select to_char(h1,\''yyyy-mm-dd HH24:mi:ss\'') H1 from hoegh;
- H1
- -------------------
- 2015-04-28 16:30:00
- 2015-04-28 16:31:00
- 2015-04-28 16:32:00
- 2015-04-28 16:24:25
- SQL>
7.禁用job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_scheduler.disable(\''job_hoegh\'');
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
- SQL> select job_name,enabled,state from user_scheduler_jobs;
- JOB_NAME ENABLED STATE
- ------------------------------ ------- ---------------
- JOB_HOEGH FALSE DISABLED
- SQL>
8.启用job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_scheduler.enable(\''job_hoegh\'');
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
- SQL> select job_name,enabled,state from user_scheduler_jobs;
- JOB_NAME ENABLED STATE
- ------------------------------ ------- ---------------
- JOB_HOEGH TRUE SCHEDULED
- SQL>
9.删除job
点击(此处)折叠或打开
- SQL>
- SQL> begin
- 2 dbms_scheduler.drop_job(\''job_hoegh\'');
- 3 end;
- 4 /
- PL/SQL procedure successfully completed
- SQL>
- SQL> select job_name,enabled,state from user_scheduler_jobs;
- JOB_NAME ENABLED STATE
- ------------------------------ ------- ---------------
- SQL>
dba_jobs_running:尝试从过程中访问时,表或视图不存在
只需使用类似的内容查询正在运行的作业
select * from dba_jobs_running;
在我的sqldevelopers SQL控制台中执行时,效果很好。
但是,在过程中具有完全相同的语句时,它不起作用。编译失败
PL/SQL: ORA-00942: table or view does not exist
有任何想法吗?是否有需要考虑的范围?
任何建议都将受到高度赞赏,在此先感谢:)
今天关于sql – dba_jobs_running:尝试从过程访问时,表或视图不存在和过程已请求访问一对象的分享就到这里,希望大家有所收获,若想了解更多关于"ORA-00942: 表或视图不存在 "的原因和解决方法、"ORA-00942: 表或视图不存在" 的原因和解决方法、dba_job dba_schedule_jobs、dba_jobs_running:尝试从过程中访问时,表或视图不存在等相关知识,可以在本站进行查询。
本文标签: