我正在尝试创建一个30字节长的链式步骤。它失败了。
设置:
SQL> begin
2 dbms_scheduler.create_program(
3 program_name => lpad('A', 30, 'A')
4 , program_type => 'PLSQL_BLOCK'
5 , program_action => 'begin null; end;'
6 );
7 dbms_scheduler.create_chain('CHAIN_NAME');
8 end;
9 /
PL/SQL procedure successfully completed.
创建连锁步骤:
SQL> begin
2 dbms_scheduler.define_chain_step(
3 chain_name => 'CHAIN_NAME'
4 , step_name => lpad('A', 30, 'B')
5 , program_name => lpad('A', 30, 'A')
6 );
7 end;
8 /
begin
*
ERROR at line 1:
ORA-27465: invalid value BBBBBBBBBBBBBBBBBBBBBBBBBBBBBA for attribute step_name
ORA-06512: at "SYS.DBMS_ISCHED", line 5057
ORA-06512: at "SYS.DBMS_ISCHED", line 1760
ORA-06512: at "SYS.DBMS_SCHEDULER", line 1786
ORA-06512: at line 2
我有一个字节语义数据库。
描述DBA_SCHEDULER_CHAIN_STEPS,STEP_NAME的最大长度为128个字节,即32个4字节的unicode字符:
SQL> desc dba_scheduler_chain_steps;
Name Null? Type
----------------------------------------- -------- --------------------
OWNER NOT NULL VARCHAR2(128)
CHAIN_NAME NOT NULL VARCHAR2(128)
STEP_NAME NOT NULL VARCHAR2(128)
...
如果我查看DBA_SCHEDULER_CHAIN_STEPS的定义,那么STEP_NAME列来自SYS.SCHEDULER $ _STEP.VAR_NAME。本专栏的定义是:
SQL> select data_type, data_length, char_length, char_used
2 from dba_tab_columns
3 where owner = 'SYS'
4 and table_name = 'SCHEDULER$_STEP'
5 and column_name = 'VAR_NAME';
DATA_TYPE DATA_LENGTH CHAR_LENGTH C
--------- ----------- ----------- -
VARCHAR2 128 128 B
换句话说,对象名称的最大大小为128个字节(32个Unicode字符)。
Oracle数据库管理员指南的Section 29.2 "About Scheduler Objects and Their Naming"说
Scheduler对象完全遵循数据库对象的命名规则,并与其他数据库对象共享SQL命名空间。
名称长度必须为1到30个字节...
但是,如果我创建一个名为24字节长的链步骤和一个名称长度为25字节的链步骤,则24字节名称将成功,25字节将失败
SQL> begin
2 dbms_scheduler.define_chain_step(
3 chain_name => 'CHAIN_NAME'
4 , step_name => lpad('A', 24, 'B')
5 , program_name => lpad('A', 30, 'A')
6 );
7 end;
8 /
PL/SQL procedure successfully completed.
SQL> begin
2 dbms_scheduler.define_chain_step(
3 chain_name => 'CHAIN_NAME'
4 , step_name => lpad('A', 25, 'B')
5 , program_name => lpad('A', 30, 'A')
6 );
7 end;
8 /
begin
*
ERROR at line 1:
ORA-27465: invalid value BBBBBBBBBBBBBBBBBBBBBBBBA for attribute step_name
ORA-06512: at "SYS.DBMS_ISCHED", line 5057
ORA-06512: at "SYS.DBMS_ISCHED", line 1760
ORA-06512: at "SYS.DBMS_SCHEDULER", line 1786
ORA-06512: at line 2
: - (
为什么呢?这是在任何地方记录的吗?
答案 0 :(得分:3)
DBMS_SCHEDULER.define_chain_step属性“step_name”的这种限制是由开发明确编码和确认的。
- 属性'step_name'不能超过24个字符或包含'。'
该文件仅涉及11.2.0.3,但它仍然在12.1和12.2中抛出错误。
这并没有真正解释为什么,但它有点记录......只是没有在文档中。