真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle怎么存儲(chǔ)單號(hào) oracle存儲(chǔ)過程單引號(hào)

oracle怎么新增存單號(hào)

oracle存儲(chǔ)過程生成單號(hào)

專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)林州免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

oracle存儲(chǔ)過程生成單號(hào),Oracle生成單據(jù)編號(hào)存儲(chǔ)過程的實(shí)例代碼

?

旅程1229

轉(zhuǎn)載

關(guān)注

0點(diǎn)贊·137人閱讀

Oracle生成單據(jù)編號(hào)存儲(chǔ)過程,在做訂單類似的系統(tǒng)都可能會(huì)存在訂單編號(hào)不重復(fù),或是流水號(hào)按日,按年,按月進(jìn)行重新編號(hào)。

可以參考以下存儲(chǔ)過程

CREATE OR REPLACE

procedure Pro_GetBillNO(TypeTable in varchar2,cur_mycursor out sys_refcursor)

as

DReceiptCode varchar2(40);

DReceiptName varchar2(50);

DPrefix1 varchar2(50);

DISO varchar2(50);

DIsAutoCreate varchar2(20);

DPrefix2 varchar2(20);

DPrefix3 varchar2(20);

DDateValue date;

DNO number;

DLength number;

DResetType number;

DSeparator varchar2(20);

DReturnValue varchar2(50);

strSql varchar2(1000);

begin

DReturnValue:='';

select "ReceiptCode","ReceiptName","Prefix1","ISO","IsAutoCreate","Prefix2","Prefix3","DateValue","NO","Length","ResetType","Separator" into

DReceiptCode,DReceiptName,DPrefix1,DISO,DIsAutoCreate,DPrefix2,DPrefix3,DDateValue,DNO,DLength,DResetType,DSeparator from

"SysReceiptConfig" where "ReceiptCode"=TypeTable;

if to_number(DResetType)0

then

if DIsAutoCreate=1 THEN

if DResetType=1 then --

oracle存儲(chǔ)過程單引號(hào)怎么表示

在ORACLE中,單引號(hào)有兩個(gè)作用,一是字符串是由單引號(hào)引用,二是轉(zhuǎn)義。單引號(hào)的使用是就近配對(duì),即就近原則。而在單引號(hào)充當(dāng)轉(zhuǎn)義角色時(shí)相對(duì)不好理解???

1、從第二個(gè)單引號(hào)開始被視為轉(zhuǎn)義符,如果第二個(gè)單引號(hào)后面還有單引號(hào)(哪怕只有一個(gè))。??????select?''''?from?dual?????----output:'??解釋:第二個(gè)單引號(hào)被作為轉(zhuǎn)義符,第三個(gè)單引號(hào)被轉(zhuǎn)義,可將sql寫成這樣更好理解:?select?'?''?'?from?dual?----output:'???

2、連接符‘||’導(dǎo)致了新一輪的轉(zhuǎn)義:連接符號(hào)‘||’左右的單引號(hào)沒有任何的關(guān)系,除非‘||’是作為字符串的一部分(這在動(dòng)態(tài)SQL中很常見)。?

select?'name'||''''?from?dual?----output:name'??理解:||后面的作為一個(gè)字符串,即前后是',中間又是一個(gè)密集型單引號(hào)串'',因此第一個(gè)為轉(zhuǎn)義功能?select?'name'''''?from?dual?----output:name''?理解:第一個(gè)和最后一個(gè)單引號(hào)作為字符串引用符,中間四個(gè)單引號(hào)兩兩轉(zhuǎn)義??。???

舉幾個(gè)簡(jiǎn)單例子:???一個(gè)單引號(hào),是最正常的情況,比如:'asdfas',這代表一個(gè)字符串,顯示的內(nèi)容是?asdfas??;???兩個(gè)單引號(hào),一般成對(duì)出現(xiàn)在一個(gè)單引號(hào)之內(nèi),表示一個(gè)單引號(hào)之內(nèi)的單引號(hào),比如?'sdfs''123''dfsdf',這種字符串顯示的時(shí)候就是?sdfs'123'dfsdf???三個(gè)或四個(gè)單引號(hào)的情況是在一個(gè)和兩個(gè)的情況之上發(fā)展出來的,比如'asd'''||輸入值||'''',它顯示的時(shí)候內(nèi)容就是:?asd'輸入值'。?(把一對(duì)兩個(gè)單引號(hào)分開了,一部分在||之前,一部分在||之后)?(后面四個(gè)單引號(hào)分開看,中間兩個(gè)是一對(duì)--代表一對(duì)單引號(hào)之內(nèi)的一個(gè)單引號(hào),外邊兩個(gè)是一對(duì)--代表一對(duì)單引號(hào))

Oracle數(shù)據(jù)類型及存儲(chǔ)方式

概述

通過實(shí)例 全面而深入的分析oralce的基本數(shù)據(jù)類型及它們的存儲(chǔ)方式 以O(shè)RACLE G為基礎(chǔ) 介紹oralce g引入的新的數(shù)據(jù)類型 讓你對(duì)oracle數(shù)據(jù)類型有一個(gè)全新的認(rèn)識(shí) 揭示一些不為人知的秘密和被忽略的盲點(diǎn) 從實(shí)用和優(yōu)化的角度出發(fā) 討論每種數(shù)據(jù)類型的特點(diǎn) 從這里開始o(jì)racle之旅!

第一部份 字符類型

§ char

定長(zhǎng)字符串 會(huì)用空格來填充來達(dá)到其最大長(zhǎng)度 最長(zhǎng) 個(gè)字節(jié)

. 新建一個(gè)測(cè)試表test_char 只有一個(gè)char類型的列 長(zhǎng)度為

SQL create table test_char(colA char( ));

Table created

. 向這個(gè)表中插入一些數(shù)據(jù)

SQL insert into test_char values( a );

row inserted

SQL insert into test_char values( aa );

row inserted

SQL insert into test_char values( aaa );

row inserted

SQL insert into test_char values( aaaa );

row inserted

SQL insert into test_char values( aaaaaaaaaa );

row inserted

注意 最多只能插入 個(gè)字節(jié) 否是就報(bào)錯(cuò)

SQL insert into test_char values( aaaaaaaaaaa );

insert into test_char values( aaaaaaaaaaa )

ORA : value too large for column PUB_TEST TEST_CHAR COLA (actual: maximum: )

. 使用dump函數(shù)可以查看每一行的內(nèi)部存數(shù)結(jié)構(gòu)

SQL select colA dump(colA) from test_char;

COLA?????? DUMP(COLA)

a????????? Typ= Len= :

aa???????? Typ= Len= :

aaa??????? Typ= Len= :

aaaa?????? Typ= Len= :

aaaaaaaaaa Typ= Len= :

注意 Typ= 表示數(shù)據(jù)類型的ID Oracle為每一種數(shù)據(jù)類型都進(jìn)行了編號(hào) 說明char類型的編號(hào)是

Len = 表示所在的內(nèi)部存儲(chǔ)的長(zhǎng)度(用字節(jié)表示) 雖然第一例只存了一個(gè)字符 a 但是它還是占用了 個(gè)字節(jié)的空間

表示內(nèi)部存儲(chǔ)方式 可見oracle的內(nèi)部存儲(chǔ)是以數(shù)據(jù)庫字符集進(jìn)行存儲(chǔ)的

正好是字符a的ASCII碼

可以使用chr函數(shù)把ASCII碼轉(zhuǎn)成字符

SQL select chr( ) from dual;

CHR( )

a

要想知道一個(gè)字符的ASCII碼 可以使用函數(shù)ascii

SQL select ascii( a ) from dual;

ASCII( A )

正好是空格的ascii碼值

Char類型是定長(zhǎng)類型 它總會(huì)以空格來填充以達(dá)到一個(gè)固定寬度

使用char類型會(huì)浪費(fèi)存儲(chǔ)空間

Oracle的數(shù)據(jù)類型的長(zhǎng)度單位是字節(jié)

SQL select dump( 漢 ) from dual;

DUMP( 漢 )

Typ= Len= :

可見一個(gè)漢字在oracle中是占用了兩個(gè)字節(jié)的

英文字母或符號(hào)只占用一個(gè)字節(jié)

Char( )最多可存放 個(gè)漢字

§ varchar

是一種變長(zhǎng)的字符類型 最多可占用 字節(jié)的存儲(chǔ)空間

創(chuàng)建一個(gè)表 只有一列 類型為varchar 長(zhǎng)度為

SQL create table test_varchar( col varchar ( ));

Table created

插入一些數(shù)據(jù)

SQL insert into test_varchar values( a );

row inserted

SQL insert into test_varchar values( aa );

row inserted

SQL insert into test_varchar values( aaa );

row inserted

SQL insert into test_varchar values( aaaaaaaaaa );

row inserted

SQL insert into test_varchar values( aaaaaaaaaaa );

用dump函數(shù)查看每一行的內(nèi)部存儲(chǔ)結(jié)構(gòu)

SQL select col dump(col) from test_varchar;

COL??????? DUMP(COL)

a????????? Typ= Len= :

aa???????? Typ= Len= :

aaa??????? Typ= Len= :

aaaaaaaaaa Typ= Len= :

Typ= 說明varchar 類型在oracle中的類型編號(hào)為

Len代表了每一行數(shù)據(jù)所占用的字節(jié)數(shù)

后面是具體的存儲(chǔ)值

由此可見 varchar 是存多少就占用多少空間 比較節(jié)省空間的 不會(huì)像char那樣用空格填充

§ byte 和char

在 g中 字符類型的寬度定義時(shí) 可以指定單位

Byte就是字節(jié)

Char就是字符

Varchar ( byte) 長(zhǎng)度為 個(gè)字節(jié)

Varchar ( char) 長(zhǎng)度為 個(gè)字符所占的長(zhǎng)度

Char( byte)長(zhǎng)度為 個(gè)字節(jié)

Char( char) 長(zhǎng)度為 個(gè)字符所占的長(zhǎng)度

一個(gè)字符占用多少個(gè)字節(jié) 是由當(dāng)前系統(tǒng)采用的字符集來決定的

如一個(gè)漢字占用兩個(gè)字節(jié)

查看當(dāng)前系統(tǒng)采用的字符集

SQL select * from nls_database_parameters where parameter = NLS_CHARACTERSET ;

PARAMETER????????????????????? VALUE

NLS_CHARACTERSET?????????????? ZHS GBK

如果在定義類型時(shí) 不指定單位 默認(rèn)是按byte 即以字節(jié)為單位的

采用char為單位的好處是 使用多字節(jié)的字符集

比如 在ZHS GBK字符集中 一個(gè)漢字占用兩個(gè)字節(jié)

把數(shù)據(jù)表的某一列長(zhǎng)度定義為可存放 個(gè)漢字 通過下面的定義就可以了

Create table test_varchar(col_char varchar ( char));

這樣相對(duì)簡(jiǎn)單一些 在數(shù)據(jù)庫表設(shè)計(jì)時(shí)需要注意

繼續(xù)實(shí)驗(yàn) 新建一個(gè)表 包含兩列 一列采用byte為單位 一列采用char為單位

SQL create table test_varchar (col_char varchar ( char) col_byte varchar ( byte));

Table created

Col_char列 定義為可存放 個(gè)字符

Col_byte 列 定義為可存放 個(gè)字節(jié)的字符

當(dāng)前的系統(tǒng)采用字符集為ZHS GBK 所以一個(gè)字符占兩個(gè)字節(jié)

試著在表中插入一些數(shù)據(jù)

SQL insert into test_varchar values( a a );

row inserted

SQL insert into test_varchar values( 袁 a );

row inserted

SQL insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 aaaaaaaaaa );

row inserted

SQL insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 袁袁袁袁袁袁袁袁袁袁 );

insert into test_varchar values( 袁袁袁袁袁袁袁袁袁袁 袁袁袁袁袁袁袁袁袁袁 )

ORA : value too large for column PUB_TEST TEST_VARCHAR COL_BYTE (actual: maximum: )

第一次 在兩列中都插入字符a

第二次 在col_char列插入字符 袁 在col_byte插入字符a

第三次 在col_char列中插入 個(gè)中文字符 袁 在col_byte插入 個(gè)字符a

第四次 在兩列中都插入中文字符 袁 時(shí) 報(bào)錯(cuò)了 第二列長(zhǎng)度不夠

再看看每一行的存儲(chǔ)結(jié)構(gòu)

SQL select col_char dump(col_char) from test_varchar ;

COL_CHAR???????????? DUMP(COL_CHAR)

a??????????????????? Typ= Len= :

袁?????????????????? Typ= Len= :

袁袁袁袁袁袁袁袁袁袁 Typ= Len= :

當(dāng)我們?cè)赾ol_char列插入 個(gè)漢字時(shí) 它的長(zhǎng)度為

盡管我們?cè)诙x的時(shí)候是采用varchar ( char)

由此可見 oracle是根據(jù)當(dāng)前數(shù)據(jù)庫采用的字符集 每個(gè)字符的所占字節(jié)數(shù) X 字段長(zhǎng)度來決定了該字段所占的字節(jié)數(shù)

在本例中 varchar ( char)相當(dāng)于varchar ( )

不信 我們可以試試看

SQL desc test_varchar ;

Name???? Type???????? Nullable Default Comments

COL_CHAR VARCHAR ( ) Y

COL_BYTE VARCHAR ( ) Y

當(dāng)采用多字節(jié)的字符集時(shí) 定義字段長(zhǎng)度還是采用char為單位指定為佳 因?yàn)榭梢员苊庾侄伍L(zhǎng)度的問題

當(dāng)不知道當(dāng)前數(shù)據(jù)庫采用的字符集 一個(gè)字符占用多少字節(jié)時(shí) 可以使用lengthb函數(shù)

SQL select lengthb( 袁 ) from dual;

LENGTHB( 袁 )

§ char還是varchar

新建一個(gè)表 一列為char類型 一列為varchar 類型

SQL create table test_char_varchar(char_col char( ) varchar_col varchar ( ));

Table created

向該表中的兩列都插入相關(guān)的數(shù)據(jù)

SQL insert into test_char_varchar values( Hello World Hello World );

row inserted

SQL select * from test_char_varchar;

CHAR_COL???????????? VARCHAR_COL

Hello World????????? Hello World

以char_col列為條件查詢

SQL select * from test_char_varchar where char_col = Hello World ;

CHAR_COL???????????? VARCHAR_COL

Hello World????????? Hello World

以varchar_col列為條件查詢

SQL select * from test_char_varchar where varchar_col = Hello World ;

CHAR_COL???????????? VARCHAR_COL

Hello World????????? Hello World

似乎char 和varchar類型沒有什么兩樣 再看看下面的語句

SQL select * from test_char_varchar where varchar_col =char_col;

CHAR_COL???????????? VARCHAR_COL

這已經(jīng)看出他們并不一樣 這涉及到字符串比較的問題

因?yàn)橐呀?jīng)發(fā)生了隱式轉(zhuǎn)換 在與char列char_col進(jìn)行比較時(shí) char_col列的內(nèi)容已經(jīng)轉(zhuǎn)換成了char( ) 在Hello World后面以空格進(jìn)行填充了 而varchar_col列并沒有發(fā)生這種轉(zhuǎn)換

如果要讓char_col列與varchar_col列相等 有兩種方法

第一種是 使用trim把char_col列的空格去掉

第二種是 使遙rpad把varchar_col列用空格進(jìn)行填充長(zhǎng)度為 的字符

SQL select * from test_char_varchar where trim(char_col) = varchar_col;

CHAR_COL???????????? VARCHAR_COL

Hello World????????? Hello World

SQL select * from test_char_varchar where char_col = rpad(varchar_col );

CHAR_COL???????????? VARCHAR_COL

Hello World????????? Hello World

如果使用trim函數(shù) 如果char_col列上有索引 那么索引將不可用了

lishixinzhi/Article/program/Oracle/201311/17771

求ORACLE的存儲(chǔ)過程:需求如下,比如單號(hào)(字段名)值為1001的count數(shù)為一萬,我需要把這一萬的數(shù)據(jù)分兩組

是隨機(jī)分組嗎?如果是隨機(jī)分組可以用分析函數(shù)來解決,

先用MOD 5 函數(shù)把數(shù)據(jù)分成五組,然后排序,取rownum

SELECT COL,MOD_GROUP,COL||'-'||ROW_NUMBER() OVER(PARTITION BY MOD_GROUP ORDER BY COL) RN FROM (

SELECT MOD(ROWNUM,5) MOD_GROUP,COL FROM TABLE

)ORDER BY MOD_GROUP

oracle中訂單明細(xì)表一個(gè)訂單號(hào)怎么存多個(gè)商品

要是訂單表中只有訂單號(hào)是主鍵,那么你這個(gè)肯定實(shí)現(xiàn)不了。

可以使用聯(lián)合主鍵,這樣就沒事了。

用 訂單號(hào),交易日期做聯(lián)合主鍵,建議 交易日期取到分鐘,要是取到日的話,可能還會(huì)重復(fù)

oracle保存時(shí)自動(dòng)產(chǎn)生編號(hào)

Oracle保存時(shí)可以使用序列和觸發(fā)器完成自動(dòng)產(chǎn)生編號(hào)。

1:創(chuàng)建序列

create sequence orderSeq;

2:創(chuàng)建觸發(fā)器

CREATEORREPLACETRIGGER order_TRG

BEFOREINSERTORUPDATEOF PD_ID

ON Order

FOREACHROW

BEGIN

IF INSERTING THEN

if :NEW.TypeID then

//計(jì)算編號(hào) 使用 oderSeq.NEXTVAL

else

//計(jì)算編號(hào) 使用 oderSeq.NEXTVAL

endif;

SELECT 計(jì)算編號(hào) INTO :NEW.orderID FROM DUAL;

ELSE

RAISE_APPLICATION_ERROR(-20020, '不允許更新orderID值!');

ENDIF;


當(dāng)前題目:oracle怎么存儲(chǔ)單號(hào) oracle存儲(chǔ)過程單引號(hào)
網(wǎng)頁路徑:http://weahome.cn/article/hgsggj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部