VARCHAR执行PLSQL过程时丢失前导0

时间:2017-08-07 03:12:46

标签: oracle plsql

我有一个PL / SQL脚本,它在oracle DB上执行许多过程。 该脚本定义:

DECLARE
    productkey VARCHAR2(100);

BEGIN
  productKey := '000000000070307037';

  ...

  ProcedureName(productKey);

该过程需要VARCHAR2

PROCEDURE     ProcedureName (
  productKey VARCHAR2
  )

该程序插入表格中:

BEGIN
    Insert into Mytable
      (
        THIS_PRODUCT_KEY
      )
    Values
      (productKey);

当我查询该表时,产品Key = 70307037,即前导0已经丢失。

我看到了一些类似的问题,建议使用TO_CHAR,我尝试使用TO_CHAR在脚本中定义productKey,并修改使用TO_CHAR写入的过程:

BEGIN
    Insert into Mytable
      (
        THIS_PRODUCT_KEY
      )
    Values
      (TO_CHAR(productKey,'000000000000000000'));

在没有领先0的情况下仍然存在。

有多个查询使用产品密钥加入,并且在缺少0时不起作用。

当变量是VARCHAR时,为什么我会丢失0?

1 个答案:

答案 0 :(得分:2)

我相信" THIS_PRODUCT_KEY"您的" Mytable"中的列table不是varchar2列。我认为这是数字。如果更改" THIS_PRODUCT_KEY"的数据类型列到varchar2,它不会失去0。