Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 游标列值是否被随机截断?_Oracle_Oracle11g_Cursor_Truncated - Fatal编程技术网

Oracle 游标列值是否被随机截断?

Oracle 游标列值是否被随机截断?,oracle,oracle11g,cursor,truncated,Oracle,Oracle11g,Cursor,Truncated,我在oracle存储过程中有一个游标,它随机截断一个返回列中的值 我看不出有任何模式可以这样做,有时它可以工作,有时它只是将值截断为1个字符长 这是光标: CURSOR cur_clients IS SELECT DISTINCT p.PROPOSAL_ID, rop.client_id, c.FORENAME, c.INITIAL1, c.SURNAME, concat(c.FORENAME,c.SURNAME), c.DATE_OF_BIRTH, c.SEX, a.ADD

我在oracle存储过程中有一个游标,它随机截断一个返回列中的值

我看不出有任何模式可以这样做,有时它可以工作,有时它只是将值截断为1个字符长

这是光标:

CURSOR cur_clients IS
    SELECT DISTINCT p.PROPOSAL_ID, rop.client_id, c.FORENAME, c.INITIAL1, c.SURNAME, concat(c.FORENAME,c.SURNAME),
      c.DATE_OF_BIRTH, c.SEX, a.ADDRESS_LINE1, a.ADDRESS_LINE2, a.ADDRESS_LINE3, a.ADDRESS_LINE4, '', a.POSTCODE, c.PPSN_NO, swr.scv_code
      FROM proposal p, roleonproposal rop, client c, address a, scv_wn_roles swr
      WHERE p.proposal_id = p_proposal_id
      AND p.proposal_id = rop.proposal_id
      AND rop.ROLE_ID <> v_Role
      AND rop.CLIENT_ID = c.CLIENT_ID
      AND c.CLIENT_ID = a.CLIENT_ID
      AND p.PROPOSAL_ID = a.PROPOSAL_ID
      AND rop.role_id = swr.id
      AND p.company_id = swr.company_id;
将角色插入为W的表格如下所示:

INSERT INTO scv_policy_client_lookup spc
   (spc.policy_number, spc.system_client_id, spc.qsclient_id, spc.role_id)
VALUES
   (c_client.proposal_id, c_client.client_id, v_QS_id, c_client.scv_code);
这两个表的结构如下:

FOR c_client IN cur_clients LOOP
create table SCV_WN_ROLES
(
  ID              NUMBER(10) not null,
  REF_DESCRIPTION VARCHAR2(50),
  COMPANY_ID      NUMBER not null,
  SCV_CODE        CHAR(3)
);
以及

列swr.scv_代码插入到存储过程中的其他表中,它在这些表中工作良好,仅此查找表

我尝试将光标值c_client.scv_代码移动到一个局部变量VARCHAR2(3)中,然后将其写入查找表,但这也并不总是有效

如果这很重要的话,我们正在使用Oracle 11g

有人发现可疑的东西吗

谢谢你的帮助,
mcquaim

我找到了答案,谢天谢地,它与上述代码无关,我觉得我快疯了

我们有一个在IBMDataStage&Qualitystage上运行的夜间批处理作业,它分配唯一的QS客户机id。此批处理作业的糟糕设计意味着它正在将此表的全部内容读取到一个临时数据集中,然后使用新的QS ID将其全部重新写入

问题是临时数据集只允许角色ID使用1个字符,因此截断了上述角色

上面的插入实际上很好,但导致问题的是隔夜的Datastage作业


再次感谢所有看过的人。

您确定您的表中只有这8个角色值吗?当您使用局部变量时,是否显示该变量以进行验证,如果是,是否显示
W
或更长的值?(为什么要将
CHAR(3)
VARCHAR(3)
VARCHAR(4)
混合在同一个值中?),谢谢你的回复。表中有16个角色,但针对不同的公司(1和4),但只有8个与我的测试相关。角色表是一个已定义为CHAR(3)的现有表,因此我不想更改它,除非它是必需的。你认为这可能是我的问题吗?如果我手动运行游标查询,我总是会得到正确的角色值,而不会被截断。如果我手动执行Oracle SP,它将一直工作,只有一次除外。我试着在PLSQL中调试,它从来没有角色不正确,即使我定义了局部变量。。它只发生在只有两个字符的scv_代码的值上吗???不,它发生在WL1、WL2或一些2字符值上,比如WP或WE。。注意,字符(3)会用空格填充任何更短的字符。这意味着您的值将是('WL1','WL2','WG','WB','WD','WP','WT','WE')。比例字体很难看到,但在任何2个字符代码后都有空格。
create table SCV_POLICY_CLIENT_LOOKUP
(
  POLICY_NUMBER    VARCHAR2(42) not null,
  SYSTEM_CLIENT_ID VARCHAR2(51) not null,
  QSCLIENT_ID      NUMBER(38,10) not null,
  ROLE_ID          VARCHAR2(4) not null,
  COUNTRY_IND      VARCHAR2(1) default 'R'
)