PIC中的PIC S9问题

时间:2009-12-03 05:14:39

标签: sql oracle

管理员为我分配了创建DDL脚本的任务。其中一个字段指定为PIC S9 with length 16,但我不知道Oracle是否支持PIC S9。

DDL脚本需要与oracle 10g兼容。

这是什么PIC S9数据类型?

这是否受Oracle支持?如果是,我可以使用以下内容吗?

create table tablename(srno number, name PIC S9(16) );

3 个答案:

答案 0 :(得分:1)

根据this link,PIC S9是COBOL数据类型:

PIC S9(4) COMP (Integer 16-bit)
    Specifies an integer that is 16 bits, or 2 bytes, in length.
PIC S9(9) COMP (Integer 32-bit)
    Specifies an integer that is 32 bits, or 4 bytes, in length.

According to this link,您可以使用OVERPUNCH TRAILING外部数据类型。所以你的DDL语句类似于:

CREATE TABLE tablename (
   srno NUMBER,
   name OVERPUNCH TRAILING
);

替代方法是使用NUMBER,因为它是一个数值数据类型,但是这不适用于您给出的示例 - 其中name通常是VARCHAR2。

答案 1 :(得分:0)

PIC S9是Cobol的声明。据我所知,Oracle不受支持。 你需要输入一个数字(16)字段。

答案 2 :(得分:0)

PIC S9(16)用于确保COBOL,并定义一个包含16位数字的带符号数字数据项。 BINARY,COMP- n 或PACKED DECIMAL修饰符的存在与否表示此数据如何存储在磁盘上。描述了不同的存储选项here

我怀疑你的经理不知道SQL,只是想在“Cobolese”中向你传达这些要求。如果是这样,他/她真的说这需要是一个最多16位的有符号整数,你可以使用最自然的Oracle类型, NUMBER(16)或只是 INTEGER

OVERPUNCH引用@OMG Ponies发现在Pro * Cobol中,这是一个允许您在COBOL程序中嵌入Oracle SQL语句的工具。为此,您需要使用Cobol类型映射Oracle内部类型(如NUMBER),如PIC S9(16)PACKED-DECIMAL。在这种情况下,您将Cobol类型定义为OVERPUNCH LEADING(而不是TRAILING)。

术语“overpunch”来自早期大型机上的分区十进制表示。为了节省穿孔卡上的空间,标志将在前导或尾随数字上“过度”。