管理员为我分配了创建DDL脚本的任务。其中一个字段指定为PIC S9 with length 16
,但我不知道Oracle是否支持PIC S9。
DDL脚本需要与oracle 10g兼容。
这是什么PIC S9数据类型?
这是否受Oracle支持?如果是,我可以使用以下内容吗?
create table tablename(srno number, name PIC S9(16) );
答案 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”来自早期大型机上的分区十进制表示。为了节省穿孔卡上的空间,标志将在前导或尾随数字上“过度”。