【问题标题】:oracle sequence for returning number as a string用于将数字作为字符串返回的 oracle 序列
【发布时间】:2012-02-22 08:02:54
【问题描述】:

我有一个返回这样一个数字的序列

CREATE SEQUENCE test.SEC_FORM 
START WITH 9000
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
CACHE 20
NOORDER;

我创建了一个触发器来将此值插入到表格 FORM 中。

CREATE OR REPLACE TRIGGER test.TRG_SEC_FORM
BEFORE INSERT
ON test.FORM
FOR EACH ROW
BEGIN
  IF :NEW.FORM_ID IS NULL THEN
      SELECT test.SEC_FORM.NEXTVAL INTO :NEW.FORM_ID FROM DUAL;
   END IF;
END ; 

但是当表单表中的 form_id 是字符串时,序列返回整数。 我需要一个像'9000'之类的字符串。

我该怎么做?

【问题讨论】:

  • 这在 11g 上对我有用,无需显式转换为 char
  • 是的,问题已通过使用 to_char(test.sec_form.nextval) 解决。
  • 那么您应该将 penartur 的答案标记为正确答案:)

标签: oracle sequence


【解决方案1】:
  1. 为什么FORM_ID 是一个字符串,你为什么不把它变成一个整数?

2.

CREATE OR REPLACE TRIGGER test.TRG_SEC_FORM
BEFORE INSERT
ON test.FORM
FOR EACH ROW
BEGIN
  IF :NEW.FORM_ID IS NULL THEN
      SELECT TO_CHAR(test.SEC_FORM.NEXTVAL) INTO :NEW.FORM_ID FROM DUAL;
   END IF;
END ; 

【讨论】:

  • +1,你忘了3,“无论如何它都会被隐式转换,所以没有必要担心它”
【解决方案2】:

也许您应该考虑将 FORM_ID 数据类型从 VARCHAR 或 STRING 更改为 NUMBER。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多