Kiểu dữ liệu vô hướng là gì?
Mỗi phần tử hằng và biến bạn sử dụng trong chương trình của mình đều có một kiểu dữ liệu. Kiểu dữ liệu quy định định dạng lưu trữ, các hạn chế về cách sử dụng biến và các giá trị hợp lệ có thể được đặt trong biến đó Show PL/SQL cung cấp một tập hợp toàn diện các kiểu dữ liệu hỗn hợp và vô hướng được xác định trước. Một kiểu dữ liệu vô hướng là một nguyên tử; . Một kiểu dữ liệu tổng hợp có cấu trúc bên trong hoặc các thành phần. Hai loại kết hợp hiện được PL/SQL hỗ trợ là bản ghi và bảng (được mô tả lần lượt trong Chương 9, Bản ghi trong PL/SQL và Chương 10, Bảng PL/SQL) Các kiểu dữ liệu vô hướng rơi vào một trong bốn loại hoặc họ. số, ký tự, Boolean và ngày giờ, như được hiển thị trong Bảng 4. 1. Danh mục kiểu dữ liệu Loại Loại dữ liệu Con số BINARY_INTEGER THÁNG MƯỜI HAI SỐ THẬP PHÂN CHÍNH XÁC NHÂN ĐÔI TRÔI NỔI INT số nguyên TỰ NHIÊN CON SỐ SỐ PLS_INTEGER TÍCH CỰC THỰC NHỎ Nhân vật CHAR NHÂN VẬT DÀI NGUYÊN DÀI NCHAR NVARCHAR2 NGUYÊN ROWID CHUỖI VARCHAR VARCHAR2 Boolean BOOLESE Ngày giờ NGÀY THÁNG Đối tượng lớn (LOB) BFILE BÃI CLOB NCLOB Chúng ta hãy xem xét kỹ hơn từng kiểu dữ liệu vô hướng PL/SQL, giống như Oracle RDBMS, cung cấp nhiều kiểu dữ liệu số để phù hợp với các mục đích khác nhau. Thông thường có hai loại dữ liệu số. số nguyên và số thập phân (trong đó cho phép các chữ số ở bên phải dấu thập phân) 4. 2. 1. 1 Kiểu dữ liệu số nguyên nhị phânToàn bộ số, hoặc số nguyên, kiểu dữ liệu là BINARY_INTEGERINTEGERSMALLINTPOSITIVENATURALKiểu dữ liệu BINARY_INTEGER cho phép bạn lưu trữ các số nguyên đã ký. Phạm vi độ lớn của BINARY_INTEGER là -2 31 + 1 đến 2 31 - 1 (2 31 bằng 2147483647). BINARY_INTEGERs được biểu diễn trong trình biên dịch PL/SQL dưới dạng số nhị phân có dấu. Do đó, chúng không cần phải được chuyển đổi trước khi PL/SQL thực hiện các phép tính số. Tuy nhiên, các biến kiểu NUMBER (xem ") cần phải được chuyển đổi. Vì vậy, nếu bạn sẽ thực hiện các phép tính chuyên sâu với các giá trị số nguyên, thì bạn có thể thấy hiệu suất được cải thiện bằng cách khai báo các biến của mình là BINARY_INTEGER. Thành thật mà nói, trong hầu hết các trường hợp, khoản tiết kiệm nhỏ do BINARY_INTEGER mang lại sẽ không đáng chú ý TỰ NHIÊN và TÍCH CỰC đều là các kiểu con của BINARY_INTEGER. Một kiểu con sử dụng định dạng lưu trữ và các hạn chế về cách sử dụng biến của kiểu này, nhưng nó chỉ cho phép một tập hợp con các giá trị hợp lệ mà kiểu dữ liệu đầy đủ cho phép. Trong trường hợp các kiểu con BINARY_INTEGER, chúng tôi có các tập hợp con giá trị sau TỰ NHIÊN0 đến 231 TÍCH CỰC1 đến 2 31 Nếu bạn có một biến mà các giá trị của nó phải luôn không âm (0 hoặc lớn hơn), bạn nên khai báo biến đó là TỰ NHIÊN hoặc TÍCH CỰC. Điều này cải thiện khía cạnh tự ghi lại mã của bạn 4. 2. 1. 2 Kiểu dữ liệu số thập phânCác kiểu dữ liệu số thập phân là NUMBERFLOATDECDECIMALDOUBLE CHÍNH XÁCNUMBERNUMERICREALSử dụng kiểu dữ liệu NUMBER để lưu trữ các số có dấu phẩy động hoặc cố định với kích thước bất kỳ. Độ chính xác tối đa của biến có kiểu NUMBER là 38 chữ số. Điều này có nghĩa là phạm vi độ lớn của các giá trị là 1. 0E-129 đến 9. 999E125; Khi bạn khai báo một loại biến SỐ, bạn cũng có thể tùy chọn chỉ định độ chính xác và tỷ lệ của biến, như sau NUMBER (precision, scale) Độ chính xác của SỐ là tổng số chữ số. Tỷ lệ quy định số chữ số ở bên phải hoặc bên trái của dấu thập phân mà tại đó làm tròn xảy ra. Cả giá trị độ chính xác và tỷ lệ phải là giá trị bằng chữ (và số nguyên ở đó); . Các giá trị pháp lý cho phạm vi thang đo từ -84 đến 127. Làm tròn hoạt động như sau
Các ví dụ sau minh họa các cách khác nhau mà bạn có thể khai báo biến kiểu NUMBER
4. 2. 1. 3 Kiểu dữ liệu PLS_INTEGERKiểu dữ liệu này có sẵn trong PL/SQL Release 2. 3 trở lên Các biến được khai báo là PLS_INTEGER lưu trữ các số nguyên đã ký. Phạm vi cường độ cho kiểu dữ liệu này là -2147483647 đến 2147483647. Oracle khuyên bạn nên sử dụng PLS_INTEGER cho tất cả các phép tính số nguyên không nằm ngoài phạm vi của nó. Các giá trị PLS_INTEGER yêu cầu ít bộ nhớ hơn NUMBER giá trị và các thao tác trên PLS_INTEGER sử dụng số học máy, làm cho chúng hiệu quả hơn Các biến được khai báo là pls_integer và binary_integer có cùng phạm vi, nhưng chúng được xử lý khác nhau. Khi một phép tính liên quan đến tràn pls_integer, pl/sql sẽ đưa ra một ngoại lệ. Tuy nhiên, lỗi tràn tương tự liên quan đến số nguyên nhị phân sẽ không đưa ra ngoại lệ nếu kết quả được gán cho một biến số Phần còn lại của các kiểu dữ liệu trong danh mục số đều là các kiểu con của NUMBER. Chúng được cung cấp trong Oracle's SQL và PL/SQL để cung cấp khả năng tương thích với các kiểu dữ liệu ANSI SQL, SQL/DS và DB2. Chúng có cùng phạm vi giá trị pháp lý như loại cơ sở của chúng, như được hiển thị trong. Các kiểu dữ liệu NUMERIC, DECIMAL và DEC chỉ có thể khai báo các số có điểm cố định. FLOAT, DOUBLE PRECISION và REAL cho phép dấu thập phân động với độ chính xác nhị phân nằm trong khoảng từ 63 đến 126 Bảng 4. 2. Các kiểu con số được xác định trước tiểu loại khả năng tương thích Kiểu dữ liệu Oracle tương ứng DEC (prec, tỷ lệ) ANSI SỐ (prec, tỷ lệ) DECIMAL (prec, tỷ lệ) IBM SỐ (prec, tỷ lệ) CHÍNH XÁC NHÂN ĐÔI ANSI CON SỐ FLOAT (nhị phân) ANSI, IBM CON SỐ INT ANSI SỐ (38) số nguyên ANSI, IBM SỐ (38) NUMERIC (prec, tỷ lệ) ANSI SỐ (prec, tỷ lệ) THỰC ANSI CON SỐ NHỎ ANSI, IBM SỐ (38) Prec, scale và binary có các ý nghĩa sau chuẩn bịĐộ chính xác cho loại phụ tỉ lệQuy mô của tiểu loại nhị phânĐộ chính xác nhị phân của kiểu con Các biến có kiểu dữ liệu ký tự lưu trữ văn bản và được thao tác bởi các hàm ký tự. Bởi vì các chuỗi ký tự là "dạng tự do" nên có một số quy tắc liên quan đến nội dung của chúng. Ví dụ, bạn có thể lưu số và chữ cái, cũng như bất kỳ sự kết hợp nào của các ký tự đặc biệt, trong một biến kiểu ký tự. Tuy nhiên, có một số loại kiểu dữ liệu ký tự khác nhau, mỗi loại phục vụ một mục đích cụ thể. 4. 2. 3. 1 Kiểu dữ liệu CHARKiểu dữ liệu CHAR chỉ định rằng chuỗi ký tự có độ dài cố định. Khi bạn khai báo một chuỗi có độ dài cố định, bạn cũng chỉ định độ dài tối đa cho chuỗi, có thể nằm trong khoảng từ 1 đến 32767 byte (giá trị này cao hơn nhiều so với kiểu dữ liệu CHAR trong Oracle RDBMS, chỉ có 255). Nếu bạn không chỉ định độ dài cho chuỗi, thì PL/SQL sẽ khai báo chuỗi một byte. Lưu ý rằng điều này ngược lại với tình huống với kiểu dữ liệu SỐ. Ví dụ, một tuyên bố của fit_almost_anything NUMBER; dẫn đến một biến số có độ chính xác lên tới 38 chữ số. Bạn có thể dễ dàng có thói quen xấu là khai báo tất cả các biến số nguyên đơn giản là SỐ, ngay cả khi phạm vi của các giá trị pháp lý nhỏ hơn nhiều so với giá trị mặc định. Tuy nhiên, nếu bạn thử một chiến thuật tương tự với CHAR, bạn có thể gặp bất ngờ khó chịu. Nếu bạn khai báo một biến như sau line_of_text CHAR; sau đó ngay khi bạn gán một chuỗi nhiều hơn một ký tự cho line_of_text, PL/SQL sẽ đưa ra ngoại lệ VALUE_ERROR chung. Nó sẽ không cho bạn biết nơi nó gặp phải vấn đề này. Vì vậy, nếu bạn gặp phải lỗi này, hãy kiểm tra các khai báo biến của bạn để biết việc sử dụng CHAR lười biếng Để chắc chắn, bạn phải luôn chỉ định độ dài khi sử dụng kiểu dữ liệu CHAR. Một số ví dụ sau yes_or_no CHAR (1) DEFAULT 'Y'; line_of_text CHAR (80); --Always a full 80 characters! whole_paragraph CHAR (10000); --Think of all the spaces... Hãy nhớ rằng mặc dù bạn có thể khai báo một biến CHAR với 10.000 ký tự, nhưng bạn sẽ không thể nhồi giá trị của biến PL/SQL đó vào một cột cơ sở dữ liệu kiểu CHAR. Nó sẽ mất tối đa 255 ký tự. Vì vậy, nếu bạn muốn chèn một giá trị CHAR vào cơ sở dữ liệu và độ dài được khai báo của nó lớn hơn 255, bạn sẽ phải sử dụng hàm SUBSTR (được mô tả trong Chương 11, Hàm Ký tự ) để cắt bớt giá trị theo kích thước ________số 8 Bởi vì CHAR có độ dài cố định, PL/SQL sẽ đệm bên phải bất kỳ giá trị nào được gán cho biến CHAR với khoảng trắng theo độ dài tối đa được chỉ định trong khai báo. Trước Oracle7, kiểu dữ liệu CHAR có độ dài thay đổi; . Để cải thiện khả năng tương thích với cơ sở dữ liệu quan hệ của IBM và tuân thủ các tiêu chuẩn ANSI, Oracle7 đã giới thiệu lại CHAR dưới dạng kiểu dữ liệu có độ dài cố định và cung cấp VARCHAR2 dưới dạng kiểu dữ liệu có độ dài thay đổi. Khi RDBMS Phiên bản 6 được nâng cấp lên Oracle7, tất cả các cột CHAR sẽ tự động được chuyển đổi thành VARCHAR2. (VARCHAR2 được thảo luận trong phần tiếp theo. ) Bạn sẽ hiếm khi cần hoặc muốn sử dụng kiểu dữ liệu CHAR trong các ứng dụng dựa trên Oracle. Trên thực tế, tôi khuyên bạn không bao giờ nên sử dụng CHAR trừ khi có yêu cầu cụ thể đối với các chuỗi có độ dài cố định hoặc trừ khi bạn đang làm việc với các nguồn dữ liệu như DB2. Dữ liệu ký tự trong DB2 hầu như luôn được lưu trữ ở định dạng có độ dài cố định do các vấn đề về hiệu suất liên quan đến lưu trữ có độ dài thay đổi. Vì vậy, nếu bạn xây dựng các ứng dụng dựa trên DB2, bạn có thể phải tính đến dữ liệu có độ dài cố định trong các câu lệnh SQL và trong mã thủ tục của mình. Ví dụ: bạn có thể cần sử dụng RTRIM để xóa dấu cách khỏi (hoặc RPAD để đệm dấu cách vào) nhiều biến của bạn để cho phép so sánh chuỗi hoạt động bình thường. (Các chức năng ký tự này được mô tả trong Chương 11. ) 4. 2. 3. 2 Kiểu dữ liệu VARCHAR2 và VARCHARBiến VARCHAR2 lưu trữ các chuỗi ký tự có độ dài thay đổi. Khi bạn khai báo một chuỗi có độ dài thay đổi, bạn cũng phải chỉ định độ dài tối đa cho chuỗi, có thể nằm trong khoảng từ 1 đến 32767 byte. Định dạng chung cho khai báo VARCHAR2 là VARCHAR2 (); như trong bean_counter NUMBER (10,3);0
Độ dài tối đa được phép cho các biến PL/SQL VARCHAR2 cao hơn nhiều so với độ dài tối đa của kiểu dữ liệu VARCHAR2 trong Oracle RDBMS, chỉ là 2000. Do đó, nếu bạn dự định lưu trữ một giá trị PL/SQL VARCHAR2 vào một cột cơ sở dữ liệu VARCHAR2, bạn phải nhớ rằng chỉ có thể chèn 2000 giá trị đầu tiên. Tuy nhiên, cả PL/SQL và SQL đều không tự động giải quyết sự không nhất quán này. Bạn sẽ cần đảm bảo rằng bạn không cố vượt quá 2000 tối đa (thực tế là độ dài tối đa được chỉ định cho cột) thông qua việc sử dụng hàm SUBSTR Mặt khác, vì độ dài của cột DÀI là hai gigabyte, nên bạn có thể chèn các giá trị PL/SQL VARCHAR2 vào cột DÀI mà không lo bị tràn. (DÀI được thảo luận trong phần tiếp theo. ) Kiểu dữ liệu VARCHAR thực sự là một kiểu con của VARCHAR2, với cùng phạm vi giá trị được tìm thấy trong VARCHAR2. VARCHAR, nói cách khác, hiện tại đồng nghĩa với VARCHAR2. Việc sử dụng VARCHAR cung cấp khả năng tương thích với cơ sở dữ liệu quan hệ ANSI và IBM. Tuy nhiên, có khả năng lớn là ý nghĩa của VARCHAR có thể thay đổi trong phiên bản mới của tiêu chuẩn ANSI SQL. Oracle khuyên bạn nên tránh sử dụng VARCHAR nếu có thể, và thay vào đó hãy sử dụng VARCHAR2 để khai báo các biến PL/SQL có độ dài thay đổi (và cả các cột trong bảng) Nếu bạn sử dụng cả chuỗi có độ dài cố định (CHAR) và chuỗi có độ dài thay đổi (VARCHAR2) trong mã PL/SQL của mình, thì bạn nên biết các tương tác sau đây giữa hai kiểu dữ liệu này
Những quy tắc này có thể làm cho cuộc sống của bạn rất phức tạp. Logic có vẻ hoàn toàn chính xác có thể không hoạt động như mong đợi nếu bạn có sự pha trộn giữa dữ liệu có độ dài cố định và độ dài thay đổi. Xét đoạn sau bean_counter NUMBER (10,3);4 Thử nghiệm có điều kiện sẽ không bao giờ trả về TRUE vì giá trị company_name đã được thêm vào độ dài 30 với 21 khoảng trắng. Để giải quyết các vấn đề như thế này, bạn phải luôn RTRIM các giá trị CHAR của mình khi chúng liên quan đến bất kỳ loại so sánh hoặc sửa đổi cơ sở dữ liệu nào Sẽ hợp lý hơn khi sử dụng RTRIM (để xóa khoảng trắng ở cuối) so với sử dụng RPAD (để đệm các chuỗi có độ dài thay đổi bằng khoảng trắng). Với RPAD, bạn phải biết độ dài bạn muốn đệm chuỗi có độ dài thay đổi để khớp với chuỗi có độ dài cố định. Với RTRIM, bạn chỉ cần loại bỏ tất cả các khoảng trống và để PL/SQL thực hiện phép so sánh không đệm trống của nó Thật dễ dàng phát hiện ra vấn đề trong khối PL/SQL ẩn danh này vì tất cả các câu lệnh liên quan đều gần nhau. Thật không may, trong thế giới thực, giá trị của các biến thường được đặt theo cách ít rõ ràng hơn nhiều và thường ở một phần khác của mã với câu lệnh điều kiện không thành công. Vì vậy, nếu bạn phải sử dụng các biến có độ dài cố định, hãy chú ý đến logic tin tưởng một cách ngây thơ rằng khoảng trắng ở cuối không phải là vấn đề 4. 2. 3. 3 Kiểu dữ liệu LONGMột biến được khai báo là LONG có thể lưu trữ các chuỗi có độ dài thay đổi lên tới 32760 byte -- đây thực sự là ít hơn bảy byte so với mức cho phép trong các biến loại VARCHAR2. Kiểu dữ liệu LONG cho các biến PL/SQL khá khác với kiểu dữ liệu LONG cho các cột trong Máy chủ Oracle. Kiểu dữ liệu LONG trong Oracle7 có thể lưu trữ các chuỗi ký tự lên đến hai gigabyte hoặc 231-1 byte; Do những khác biệt về độ dài tối đa này, bạn luôn có thể chèn giá trị biến PL/SQL DÀI vào cột cơ sở dữ liệu DÀI, nhưng bạn không thể chọn giá trị cơ sở dữ liệu DÀI lớn hơn 32760 byte vào biến DÀI PL/SQL Trong cơ sở dữ liệu Oracle, có nhiều hạn chế về cách sử dụng cột DÀI trong câu lệnh SQL;
Các biến PL/SQL LONG không có các hạn chế này. Trong mã PL/SQL của bạn, bạn có thể sử dụng một biến được khai báo là DÀI giống như cách bạn sử dụng một biến được khai báo là VARCHAR2. Bạn có thể áp dụng các hàm ký tự cho biến. Bạn có thể sử dụng nó trong mệnh đề WHERE của câu lệnh CHỌN hoặc CẬP NHẬT. Tất cả điều này đều hợp lý vì ít nhất là từ quan điểm về kích thước tối đa của các biến, thực sự có rất ít sự khác biệt giữa VARCHAR2 và LONG trong PL/SQL Với thực tế là biến VARCHAR2 thực sự có độ dài tối đa cao hơn LONG và không có hạn chế nào kèm theo, tôi khuyên bạn nên luôn sử dụng kiểu dữ liệu VARCHAR2 trong các chương trình PL/SQL. LONG có một vị trí trong RDBMS, nhưng vai trò đó không bị trùng lặp trong PL/SQL. Điều này có ý nghĩa vì bạn sẽ rất hiếm khi muốn thao tác các chuỗi thực sự lớn trong chương trình của mình bằng cách sử dụng các hàm như SUBSTR hoặc LENGTH hoặc INSTR 4. 2. 3. 4 Kiểu dữ liệu RAWKiểu dữ liệu RAW được sử dụng để lưu trữ dữ liệu nhị phân hoặc các loại dữ liệu thô khác, chẳng hạn như ảnh hoặc hình ảnh được số hóa. Một biến RAW có cùng độ dài tối đa như VARCHAR2 (32767 byte), cũng phải được chỉ định khi khai báo biến. Sự khác biệt giữa RAW và VARCHAR2 là PL/SQL sẽ không cố diễn giải dữ liệu thô. Trong Oracle RDBMS, điều này có nghĩa là Oracle sẽ không thực hiện chuyển đổi bộ ký tự trên dữ liệu RAW khi nó được chuyển từ một hệ thống (ví dụ: dựa trên ASCII 7 bit) sang hệ thống khác Một lần nữa, có sự không nhất quán giữa độ dài tối đa PL/SQL cho biến RAW (32767) và độ dài tối đa RDBMS (255). Do đó, bạn không thể chèn hơn 255 byte giá trị của biến PL/SQL RAW vào một cột cơ sở dữ liệu. Mặt khác, bạn có thể chèn toàn bộ giá trị của biến PL/SQL RAW vào một cột có loại LONG RAW, là vùng chứa hai gigabyte cho dữ liệu thô trong cơ sở dữ liệu 4. 2. 3. 5 Kiểu dữ liệu LONG RAWKiểu dữ liệu LONG RAW lưu trữ dữ liệu thô lên tới 32760 byte và giống như kiểu dữ liệu LONG ngoại trừ dữ liệu trong biến LONG RAW không được diễn giải bởi PL/SQL Với thực tế là một biến RAW thực sự có độ dài tối đa cao hơn LONG RAW và không có hạn chế nào kèm theo, tôi khuyên bạn nên luôn sử dụng kiểu dữ liệu RAW trong các chương trình PL/SQL. LONG RAW có một vị trí trong RDBMS, nhưng vai trò đó không bị trùng lặp trong PL/SQL 4. 2. 3. 6 Kiểu dữ liệu ROWIDTrong Oracle RDBMS, ROWID là một cột giả là một phần của mọi bảng bạn tạo. Rowid là một giá trị nhị phân được tạo và duy trì nội bộ, xác định một hàng dữ liệu trong bảng của bạn. Nó được gọi là cột giả vì câu lệnh SQL bao gồm nó ở những nơi mà bạn thường sử dụng cột. Tuy nhiên, đó không phải là cột mà bạn tạo cho bảng. Thay vào đó, RDBMS tạo rowid cho mỗi hàng khi nó được chèn vào cơ sở dữ liệu. Thông tin trong rowid cung cấp vị trí vật lý chính xác của hàng trong cơ sở dữ liệu. Bạn không thể thay đổi giá trị của rowid Bạn có thể sử dụng kiểu dữ liệu ROWID để lưu trữ các rowid từ cơ sở dữ liệu trong chương trình pl/sql của mình. Bạn có thể CHỌN hoặc FETCH rowid cho một hàng thành biến ROWID. Để thao tác với các rowid trong Oracle8, bạn sẽ muốn sử dụng gói tích hợp sẵn, dbms_rowid (xem Phụ lục A, Có gì trên Đĩa Đồng hành? ). Trong Oracle7, bạn sẽ sử dụng hàm rowidtochar để chuyển đổi rowid thành một chuỗi có độ dài cố định và sau đó thực hiện các thao tác đối với chuỗi đó Trong Oracle7, định dạng của rowid có độ dài cố định như sau bean_counter NUMBER (10,3);5 Các thành phần của định dạng này có ý nghĩa như sau BBBBBBBKhối trong tệp cơ sở dữ liệu RRRRHàng trong khối (trong đó hàng đầu tiên bằng 0, không phải một) FFFFFTệp cơ sở dữ liệu Tất cả những con số này là hệ thập lục phân; Trong Oracle8, rowid đã được "mở rộng" để hỗ trợ các bảng và chỉ mục được phân vùng. Rowids mới, mở rộng bao gồm số đối tượng dữ liệu, xác định phân đoạn cơ sở dữ liệu. Bất kỳ đối tượng lược đồ nào được tìm thấy trong cùng một phân đoạn, chẳng hạn như một cụm bảng, sẽ có cùng một số đối tượng. Sau đó, trong Oracle8, một rowid chứa thông tin sau
Oracle8 cung cấp các chức năng trong gói dbms_rowid để chuyển đổi giữa các định dạng mới của rowids Thông thường (và luôn luôn trong Oracle7), một rowid sẽ xác định duy nhất một hàng dữ liệu. Tuy nhiên, trong Oracle8, các hàng trong các bảng khác nhau được lưu trữ trong cùng một cụm có thể có cùng giá trị rowid Bây giờ bạn có thể đang nghĩ, "Tại sao anh ấy lại nói với tôi điều này? Tôi có thực sự phải biết về các khối vật lý trong Oracle RDBMS không? Tôi nghĩ toàn bộ điểm của phương pháp quan hệ là tôi có thể tập trung vào thiết kế logic của dữ liệu của mình . Rowids thật đáng sợ. " Bình tĩnh. Rất hiếm khi bạn muốn sử dụng rowid và trong những trường hợp đó, có lẽ bạn sẽ không quan tâm đến cấu trúc bên trong của nó. Bạn chỉ cần sử dụng nó để tìm một hàng trong cơ sở dữ liệu. Truy cập bằng rowid thường là cách nhanh nhất để xác định vị trí hoặc truy xuất một hàng cụ thể trong cơ sở dữ liệu. nhanh hơn cả tìm kiếm theo khóa chính Bạn có thể sử dụng rowid trong ứng dụng Oracle Forms để truy cập hàng trong cơ sở dữ liệu tương ứng với bản ghi trên màn hình. Khi bạn tạo một khối bảng cơ sở trong Biểu mẫu Oracle, nó sẽ tự động bao gồm rowid trong khối dưới dạng "giả mục vô hình. " Bạn không nhìn thấy nó trong danh sách mục của mình, nhưng bạn có thể tham khảo nó trong trình kích hoạt và đơn vị chương trình PL/SQL của mình. Ví dụ: để cập nhật tên của một nhân viên được hiển thị trên màn hình, bạn có thể đưa ra câu lệnh sau bean_counter NUMBER (10,3);6 Bạn cũng có thể sử dụng rowid bên trong vòng lặp FOR con trỏ (hoặc bất kỳ vòng lặp nào khác mà FETCHes ghi từ một con trỏ) để thực hiện các thay đổi đối với hàng vừa FETCHed, như sau bean_counter NUMBER (10,3);7 XÓA sử dụng rowid được lưu trữ trong bản ghi emp_rec để loại bỏ ngay lập tức bất kỳ ai kiếm được hơn 50.000 đô la mà không có mối liên hệ đã biết với Chủ tịch hoặc Giám đốc điều hành. Lưu ý rằng DBA kiểm soát những người có thể có đặc quyền EXECUTE đối với thủ tục được lưu trữ này. Vì vậy, bây giờ người ta phải tự hỏi. DBA có kết nối với Chủ tịch hoặc Giám đốc điều hành không? Tất nhiên, quy trình trên cũng có thể chỉ đơn giản là tìm nạp employee_id (khóa chính của bảng nhân viên) và thực hiện XÓA dựa trên cột thực đó, như trong bean_counter NUMBER (10,3);8 Tôi không tin rằng hiệu suất lý thuyết đạt được khi tìm kiếm bằng rowid biện minh cho việc sử dụng nó. Mã kết quả khó hiểu hơn so với việc sử dụng khóa chính dành riêng cho ứng dụng. Hơn nữa, các tham chiếu đến rowid có thể gây ra sự cố về tính di động trong tương lai. [ ] Ngôn ngữ Oracle RDBMS/SQL cung cấp các tính năng không có trong PL/SQL, chẳng hạn như cấu trúc GIẢI MÃ SQL của Oracle. Mặt khác, PL/SQL có một vài thủ thuật không có sẵn trong SQL gốc. Một ví dụ đặc biệt thú vị về điều này là kiểu dữ liệu BOOLEAN. [ ] Dữ liệu Boolean chỉ có thể là TRUE, FALSE hoặc NULL. Boolean là một kiểu dữ liệu "logic" Oracle RDBMS không hỗ trợ kiểu dữ liệu Boolean. Bạn có thể tạo một bảng có một cột kiểu dữ liệu CHAR(1) và lưu trữ "Y" hoặc "N" trong cột đó để biểu thị TRUE hoặc FALSE. Tuy nhiên, đó là một sự thay thế kém cho một kiểu dữ liệu lưu trữ các giá trị Boolean thực tế đó (hoặc NULL) Bởi vì không có bản sao cho Boolean PL/SQL trong Oracle RDBMS, bạn không thể CHỌN vào một biến Boolean cũng như không thể chèn trực tiếp giá trị TRUE hoặc FALSE vào cột cơ sở dữ liệu Các giá trị và biến Boolean rất hữu ích trong PL/SQL. Vì biến Boolean chỉ có thể là TRUE, FALSE hoặc NULL, nên bạn có thể sử dụng biến đó để giải thích điều gì đang xảy ra trong mã của mình. Với Booleans, bạn có thể viết mã dễ đọc vì nó giống tiếng Anh hơn. Bạn có thể thay thế một biểu thức Boolean phức tạp bao gồm nhiều biến và kiểm tra khác nhau bằng một biến Boolean duy nhất biểu thị trực tiếp ý định và ý nghĩa của văn bản Hầu hết các ứng dụng của chúng tôi yêu cầu lưu trữ và thao tác ngày và giờ. Ngày khá phức tạp. chúng không chỉ là dữ liệu có định dạng cao mà còn có vô số quy tắc để xác định giá trị hợp lệ và phép tính hợp lệ (ngày và năm nhuận, ngày lễ quốc gia và ngày lễ của công ty, phạm vi ngày, v.v. ). May mắn thay, Oracle RDBMS và PL/SQL cung cấp cho chúng tôi trợ giúp theo nhiều cách để xử lý thông tin ngày tháng RDBMS cung cấp kiểu dữ liệu DATE thực lưu trữ cả thông tin ngày và giờ. Mặc dù bạn có thể nhập giá trị ngày ở nhiều định dạng khác nhau, RDBMS lưu trữ ngày ở định dạng nội bộ, tiêu chuẩn. Đó là một giá trị có độ dài cố định sử dụng bảy byte. Bạn thực sự không thể chỉ định giá trị nội bộ hoặc giá trị bằng chữ này bằng một phép gán. Thay vào đó, bạn dựa vào việc chuyển đổi ngầm định các giá trị ký tự và số thành một ngày thực tế hoặc chuyển đổi rõ ràng bằng hàm TO_DATE. (Phần tiếp theo mô tả các loại chuyển đổi này. ) PL/SQL cung cấp kiểu dữ liệu DATE tương ứng trực tiếp với RDBMS DATE Oracle DATE lưu trữ các thông tin sau thế kỉnămthángngàygiờphútgiâyPL/SQL xác thực và lưu trữ các ngày rơi vào khoảng ngày 1 tháng 1 năm 4712 B. C. đến ngày 31 tháng 12 năm 4712 A. D. Thành phần thời gian của một ngày được lưu trữ dưới dạng số giây sau nửa đêm. Nếu bạn nhập một ngày mà không có thời gian (nhiều ứng dụng không yêu cầu theo dõi thời gian, vì vậy PL/SQL cho phép bạn bỏ qua), phần thời gian của giá trị cơ sở dữ liệu mặc định là nửa đêm (12. 00. 00 giờ sáng) Cả kiểu dữ liệu Oracle RDBMS DATE và PL/SQL DATE đều không lưu trữ thời gian theo gia số nhỏ hơn một giây. Do đó, kiểu dữ liệu DATE không hữu ích cho việc theo dõi các hoạt động thời gian thực xảy ra trong khoảng thời gian dưới giây. Nếu bạn cần theo dõi thời gian ở các khoảng thời gian dưới giây, thay vào đó, bạn có thể lưu trữ thông tin này dưới dạng số. Bạn có thể lấy thời gian dưới giây bằng cách sử dụng hàm GET_TIME của gói DBMS_UTILITY được mô tả trong Phụ lục C, Gói tích hợp Vì một biến được khai báo DATE là một ngày thực và không chỉ đơn giản là biểu diễn ký tự của một ngày, nên bạn có thể thực hiện phép tính số học trên các biến ngày, chẳng hạn như phép trừ một ngày với một ngày khác hoặc cộng/trừ các số với một ngày. Bạn có thể sử dụng các hàm ngày tháng, được mô tả trong Chương 12, Các hàm ngày tháng, cung cấp một loạt các thao tác mạnh mẽ về ngày tháng. Sử dụng hàm SYSDATE để trả về ngày và giờ hiện tại của hệ thống. Bạn cũng có thể sử dụng hàm chuyển đổi TO_CHAR (được mô tả trong Chương 14, Hàm chuyển đổi) để chuyển đổi ngày thành chuỗi ký tự hoặc thành số Trong PL/SQL, ngày Julian là số ngày kể từ ngày hợp lệ đầu tiên, ngày 1 tháng 1 năm 4712 trước Công nguyên. Sử dụng ngày Julian nếu bạn cần thực hiện tính toán hoặc hiển thị thông tin ngày với một điểm tham chiếu duy nhất và hẹn hò liên tục Khi làm việc với các ngôn ngữ như tiếng Nhật, bộ ký tự ASCII 8 bit đơn giản là không thể biểu thị tất cả các ký tự có sẵn. Những ngôn ngữ như vậy yêu cầu 16 bit (hai byte) để biểu diễn từng ký tự. Oracle cung cấp Hỗ trợ Ngôn ngữ Quốc gia (NLS) để xử lý dữ liệu ký tự một byte và nhiều byte. Các tính năng của NLS cũng cho phép bạn chuyển đổi giữa các bộ ký tự. PL/SQL8 hỗ trợ hai bộ ký tự cho phép lưu trữ và thao tác các chuỗi ở định dạng một byte hoặc nhiều byte. Hai bộ ký tự là
PL/SQL cung cấp hai kiểu dữ liệu, NCHAR và NVARCHAR2, để lưu trữ các chuỗi ký tự được hình thành từ bộ ký tự quốc gia 4. 2. 6. 1 Kiểu dữ liệu NCHARSử dụng kiểu dữ liệu NCHAR để lưu trữ dữ liệu ký tự nls có độ dài cố định. Biểu diễn bên trong của dữ liệu được xác định bởi bộ ký tự quốc gia. Khi bạn khai báo một biến kiểu này, bạn cũng có thể chỉ định độ dài của nó. Nếu bạn không cung cấp độ dài, giá trị mặc định là 1 sẽ được sử dụng Đây là khai báo của một biến NCHAR có độ dài là 10 bean_counter NUMBER (10,3);9 Đây là khai báo của một biến NCHAR với độ dài mặc định là 1 big_whole_number NUMBER;0 Độ dài tối đa cho các biến NCHAR là 32767 Nhưng "độ dài 10" thực sự có nghĩa là gì? . Nếu bộ ký tự quốc gia là bộ ký tự có độ rộng thay đổi (JA16SJIS là một ví dụ), thì độ dài biểu thị độ dài tính bằng byte 4. 2. 6. 2 Kiểu dữ liệu NVARCHAR2Sử dụng kiểu dữ liệu nvarchar2 để lưu trữ dữ liệu ký tự nls có độ dài thay đổi. Biểu diễn bên trong của dữ liệu được xác định bởi bộ ký tự quốc gia. Khi bạn khai báo một biến kiểu này, bạn cũng phải chỉ định độ dài của nó. Đây là khai báo của một biến nvarchar2 với độ dài tối đa là 200 big_whole_number NUMBER;1 Độ dài tối đa được phép cho các biến nvarchar2 là 32767. Độ dài có cùng ý nghĩa được mô tả ở trên cho nchar Oracle8 và PL/SQL8 hỗ trợ một số biến thể của kiểu dữ liệu LOB (đối tượng lớn). LOB có thể lưu trữ một lượng lớn (tối đa bốn gigabyte) dữ liệu thô, dữ liệu nhị phân (chẳng hạn như hình ảnh) hoặc dữ liệu văn bản ký tự Trong PL/SQL, bạn có thể khai báo các biến LOB của các kiểu dữ liệu sau BFILEKhai báo các biến chứa bộ định vị tệp trỏ đến các đối tượng nhị phân lớn trong các tệp hệ điều hành bên ngoài cơ sở dữ liệu BÃIKhai báo các biến chứa bộ định vị LOB trỏ đến một đối tượng nhị phân lớn CLOBKhai báo các biến chứa bộ định vị LOB trỏ đến một khối lớn dữ liệu ký tự có độ rộng cố định một byte NCLOBKhai báo các biến chứa bộ định vị LOB trỏ đến một khối lớn dữ liệu ký tự nhiều byte một byte hoặc có độ rộng cố định Có hai loại LOB trong Oracle8. Nội bô và ngoại bộ. LOB bên trong (BLOB, CLOB và NCLOB) được lưu trữ trong cơ sở dữ liệu và có thể tham gia vào một giao dịch trong máy chủ cơ sở dữ liệu. LOB bên ngoài (BFILE) là dữ liệu nhị phân lớn được lưu trữ trong các tệp hệ điều hành bên ngoài không gian bảng cơ sở dữ liệu. LOB bên ngoài không thể tham gia giao dịch. Nói cách khác, bạn không thể cam kết hoặc khôi phục các thay đổi đối với BFILE. Thay vào đó, bạn dựa vào hệ thống tệp cơ bản để đảm bảo tính toàn vẹn của dữ liệu 4. 2. 7. 1 Kiểu dữ liệu BFILESử dụng kiểu dữ liệu BFILE để lưu trữ các đối tượng nhị phân lớn (kích thước tối đa bốn gigabyte) trong các tệp bên ngoài cơ sở dữ liệu. Biến này cung cấp cho bạn quyền truy cập I/O luồng byte, chỉ đọc vào các tệp này (có thể nằm trên đĩa cứng, CD-ROM hoặc thiết bị tương tự khác) Khi bạn khai báo một biến BFILE, bạn cấp phát bộ nhớ để lưu bộ định vị tệp của BFILE, chứ không phải chính nội dung của BFILE. Trình định vị tệp này chứa bí danh thư mục cũng như tên tệp. Xem phần sau của chương này để biết thêm thông tin về bộ định vị tệp Dưới đây là một ví dụ về khai báo biến BFILE big_whole_number NUMBER;2 4. 2. 7. 2 Kiểu dữ liệu BLOBSử dụng kiểu dữ liệu BLOB để lưu trữ các đối tượng nhị phân lớn "ngoài dòng" bên trong cơ sở dữ liệu. Điều này có nghĩa là khi một bảng có một cột BLOB, một hàng dữ liệu cho bảng đó chứa một con trỏ hoặc một bộ định vị đến vị trí thực của dữ liệu BLOB (do đó, nó không "thẳng hàng" với các giá trị cột khác của hàng) Biến BLOB chứa bộ định vị, sau đó trỏ đến đối tượng nhị phân lớn. BLOB có thể có kích thước lên tới bốn gigabyte và chúng tham gia đầy đủ vào các giao dịch. Nói cách khác, bất kỳ thay đổi nào bạn thực hiện đối với BLOB (thông qua gói tích hợp DBMS_LOB) đều có thể được khôi phục hoặc cam kết cùng với các thay đổi nổi bật khác trong giao dịch của bạn. Tuy nhiên, bộ định vị BLOB không thể mở rộng các giao dịch hoặc phiên Dưới đây là một ví dụ về khai báo biến BLOB big_whole_number NUMBER;3 4. 2. 7. 3 Kiểu dữ liệu CLOBSử dụng kiểu dữ liệu CLOB để lưu trữ các khối lớn dữ liệu ký tự một byte "ngoài dòng" bên trong cơ sở dữ liệu. Điều này có nghĩa là khi một bảng có cột CLOB, một hàng dữ liệu cho bảng đó chứa một con trỏ hoặc bộ định vị đến vị trí thực tế của dữ liệu CLOB (vì vậy nó không "thẳng hàng" với các giá trị cột khác của hàng) Biến CLOB chứa bộ định vị, sau đó trỏ đến khối lớn dữ liệu ký tự một byte. CLOB có thể có kích thước lên tới bốn gigabyte và chúng tham gia đầy đủ vào các giao dịch. Nói cách khác, bất kỳ thay đổi nào bạn thực hiện đối với CLOB (thông qua gói tích hợp DBMS_LOB) đều có thể được khôi phục hoặc cam kết cùng với các thay đổi nổi bật khác trong giao dịch của bạn. Tuy nhiên, bộ định vị CLOB không thể mở rộng các giao dịch hoặc phiên Bộ ký tự có chiều rộng thay đổi không được hỗ trợ trong CLOB Dưới đây là một ví dụ về khai báo biến CLOB big_whole_number NUMBER;4 4. 2. 7. 4 Kiểu dữ liệu NCLOBSử dụng kiểu dữ liệu NCLOB để lưu trữ các khối lớn dữ liệu ký tự nhiều byte một byte hoặc độ rộng cố định "ngoài dòng" bên trong cơ sở dữ liệu. Điều này có nghĩa là khi một bảng có cột NCLOB, một hàng dữ liệu cho bảng đó chứa một con trỏ hoặc bộ định vị đến vị trí thực tế của dữ liệu NCLOB (do đó, nó không "thẳng hàng" với các giá trị cột khác của hàng) Biến NCLOB chứa bộ định vị, sau đó trỏ đến khối lớn dữ liệu ký tự một byte. NCLOB có thể có kích thước lên tới bốn gigabyte và chúng tham gia đầy đủ vào các giao dịch. Nói cách khác, bất kỳ thay đổi nào bạn thực hiện đối với NCLOB (thông qua gói tích hợp DBMS_LOB) đều có thể được khôi phục hoặc cam kết cùng với các thay đổi nổi bật khác trong giao dịch của bạn. Tuy nhiên, bộ định vị NCLOB không thể mở rộng các giao dịch hoặc phiên Bộ ký tự có độ rộng thay đổi không được hỗ trợ trong NCLOB Dưới đây là một ví dụ về khai báo biến NCLOB big_whole_number NUMBER;5 4. 2. 7. 5 LOB và DÀICác loại LOB khác với và tốt hơn là LONG và LONG RAW. Kích thước tối đa của LONG là hai gigabyte, trong khi kích thước tối đa của LOB là bốn gigabyte Oracle cung cấp gói tích hợp mới mạnh mẽ, DBMS_LOB, để giúp bạn thao tác nội dung của LOB theo cách không thể thực hiện được với LONG. Nói chung, Oracle cung cấp cho bạn quyền truy cập ngẫu nhiên vào nội dung LOB, trong khi với LONG, bạn chỉ có quyền truy cập tuần tự. Ví dụ: với DBMS_LOB, bạn có thể thực hiện các thao tác SUBSTR và INSTR đối với LOB. Điều này là không thể với dữ liệu DÀI Oracle khuyên bạn không nên sử dụng LONG hoặc LONG RAW trong các ứng dụng của mình nữa và thay vào đó hãy tận dụng các tính năng mới và cải tiến của kiểu dữ liệu LOB. Nếu bạn sắp làm việc với các loại đối tượng, bạn thực sự không có nhiều lựa chọn. một LOB (ngoại trừ NCLOB) có thể là một thuộc tính của một loại đối tượng, nhưng LONG thì không thể 4. 2. 7. 6 Làm việc với LOBCác giá trị LOB không được lưu trữ "cùng hàng" với dữ liệu hàng khác. Thay vào đó, một bộ định vị LOB, trỏ đến LOB, được lưu trữ trong hàng. Giả sử rằng tôi đã tạo bảng sau big_whole_number NUMBER;6 Sau đó, tôi có thể hiển thị số lượng ký tự trong cuốn sách The Bell Curve với đoạn mã sau big_whole_number NUMBER;7 Đây là một ví dụ về sao chép BLOB từ hàng này sang hàng khác trong SQL big_whole_number NUMBER;8 Trong tình huống này, tôi đã chỉ định một công cụ định vị LOB mới cho ấn bản thứ hai của mình. Tôi cũng đã sao chép giá trị LOB (nội dung của ấn bản đầu tiên của tôi) vào hàng mới này, chứ không chỉ tạo một bộ định vị hoặc con trỏ khác quay lại cùng một văn bản Lưu ý rằng tôi đã sao chép toàn bộ nội dung cuốn sách của mình. Các hoạt động DML như INSERT và UPDATE luôn ảnh hưởng đến toàn bộ LOB. Nếu bạn muốn thay đổi hoặc xóa chỉ một phần của LOB, bạn cần gọi các hàm thích hợp trong gói DBMS_LOB Bạn không thể sao chép trực tiếp các giá trị giữa ký tự LOB và biến VARCHAR2, ngay cả khi giá trị LOB nhỏ và "vừa" bên trong biến VARCHAR2 đã chỉ định. Tuy nhiên, bạn có thể sử dụng các hàm trong gói DBMS_LOB để trích xuất một số hoặc tất cả giá trị CLOB và đặt giá trị đó vào một biến VARCHAR2 (như ví dụ sau minh họa) big_whole_number NUMBER;9 4. 2. 7. 7 Làm việc với BFILEBFILE rất khác với LOB nội bộ theo một số cách
Khi bạn làm việc với BFILEs trong PL/SQL, bạn vẫn làm việc với bộ định vị LOB. Tuy nhiên, trong trường hợp BFILE, bộ định vị chỉ trỏ đến tệp được lưu trữ trên máy chủ. Vì lý do này, hai hàng khác nhau trong một bảng cơ sở dữ liệu có thể có một cột BFILE trỏ đến cùng một tệp Trình định vị BFILE bao gồm bí danh thư mục và tên tệp. Bạn sử dụng hàm BFILENAME (xem Chương 13, Các hàm số, LOB và các hàm khác ) để trả về một bộ định vị dựa trên hai mẩu thông tin đó Trong khối tiếp theo, tôi khai báo một biến BFILE và gán cho nó một bộ định vị cho một tệp có tên family. ipg nằm trong "thư mục" ảnh rounded_million NUMBER (10,-6);0 Nhưng "hình ảnh" chính xác là gì? . Trên thực tế, nó là một đối tượng cơ sở dữ liệu được gọi là DIRECTORY. Đây là tuyên bố tôi sẽ sử dụng để tạo một thư mục rounded_million NUMBER (10,-6);1 Bạn sẽ cần các đặc quyền CREATE DIRECTORY hoặc CREATE ANY DIRECTORY để tạo một thư mục. Để có thể tham khảo thư mục này, bạn phải được cấp đặc quyền ĐỌC, như trong rounded_million NUMBER (10,-6);2 Để biết thêm thông tin về bí danh thư mục, xem trong Chương 13 Số lượng BFILE tối đa có thể mở trong một phiên được thiết lập theo tham số khởi tạo cơ sở dữ liệu, SESSION_MAX_OPEN_FILES. Tham số này xác định giới hạn trên đối với số lượng tệp được mở đồng thời trong một phiên (không chỉ BFILE mà tất cả các loại tệp, kể cả những tệp được mở bằng gói UTL_FILE) Cả SQL và PL/SQL đều cung cấp nhiều loại dữ liệu khác nhau. Trong nhiều trường hợp --thường xuyên hơn bạn có thể muốn thừa nhận --bạn sẽ thấy cần phải chuyển đổi dữ liệu của mình từ kiểu dữ liệu này sang kiểu dữ liệu khác Bạn có thể có một bảng lưu trữ thông tin khóa chính dưới dạng chuỗi ký tự và một bảng khác lưu trữ cùng khóa đó dưới dạng khóa ngoại ở định dạng số. Khi bạn thực hiện một nhiệm vụ, bạn sẽ cần chuyển đổi thông tin rounded_million NUMBER (10,-6);3 Bạn có thể muốn xem một giá trị rowid, trong trường hợp đó cần phải chuyển đổi giá trị đó sang định dạng ký tự (hex), như sau rounded_million NUMBER (10,-6);4 Hoặc bạn có thể thực hiện so sánh ngày bằng cách chỉ định ngày dưới dạng chữ, như sau rounded_million NUMBER (10,-6);5 Bất cứ khi nào PL/SQL thực hiện một thao tác liên quan đến một hoặc nhiều giá trị, trước tiên nó phải chuyển đổi dữ liệu sao cho có định dạng phù hợp với thao tác đó. Có hai loại chuyển đổi. rõ ràng và tiềm ẩn 4. 2. 8. 1 chuyển đổi dữ liệu rõ ràngChuyển đổi rõ ràng diễn ra khi bạn sử dụng chức năng chuyển đổi tích hợp để buộc chuyển đổi giá trị từ kiểu dữ liệu này sang kiểu dữ liệu khác. Trong ví dụ trước minh họa việc xem giá trị rowid, tôi đã sử dụng hàm chuyển đổi ROWIDTOCHAR để hàm PUT_LINE có thể hiển thị chuỗi ký tự kết quả. PL/SQL cung cấp đầy đủ các hàm chuyển đổi để cho phép chuyển đổi từ kiểu dữ liệu này sang kiểu dữ liệu khác. (Các chức năng này được khám phá đầy đủ hơn trong Chương 14. ) 4. 2. 8. 2 Chuyển đổi dữ liệu ngầm địnhBất cứ khi nào PL/SQL phát hiện ra rằng một chuyển đổi là cần thiết, nó sẽ cố gắng thay đổi các giá trị cần thiết để thực hiện thao tác. Bạn có thể sẽ ngạc nhiên khi biết tần suất PL/SQL thực hiện các chuyển đổi thay cho bạn. hiển thị những loại chuyển đổi ẩn mà PL/SQL có thể thực hiện hinh 4. 1. Chuyển đổi ngầm được thực hiện bởi PL/SQLVới các chuyển đổi ẩn, bạn có thể chỉ định các giá trị bằng chữ thay cho dữ liệu với định dạng bên trong chính xác và PL/SQL sẽ chuyển đổi chữ đó khi cần thiết. Trong ví dụ bên dưới, PL/SQL chuyển đổi chuỗi ký tự "125" thành giá trị số 125 trong quá trình gán giá trị cho biến số rounded_million NUMBER (10,-6);6 Bạn cũng có thể chuyển các tham số của một kiểu dữ liệu vào một mô-đun và sau đó yêu cầu PL/SQL chuyển đổi dữ liệu đó sang định dạng khác để sử dụng bên trong chương trình. Trong quy trình sau, tham số đầu tiên là một ngày. Khi tôi gọi thủ tục đó, tôi chuyển một giá trị chuỗi ở dạng DD-MON-YY và PL/SQL tự động chuyển đổi chuỗi đó thành một ngày rounded_million NUMBER (10,-6);7 Như được hiển thị trong , chuyển đổi bị hạn chế; . Hơn nữa, một số chuyển đổi tiềm ẩn làm tăng ngoại lệ. Xét bài tập sau rounded_million NUMBER (10,-6);8 PL/SQL không thể chuyển đổi "abc" thành một số và do đó sẽ làm tăng ngoại lệ VALUE_ERROR khi nó thực thi mã này. Tùy thuộc vào bạn để đảm bảo rằng nếu PL/SQL sẽ thực hiện các chuyển đổi ẩn, thì nó sẽ được cung cấp các giá trị mà nó có thể chuyển đổi mà không gặp lỗi 4. 2. 8. 3 Hạn chế của chuyển đổi ngầm địnhCó một số nhược điểm đối với chuyển đổi ngầm định
Do đó, tôi khuyên bạn nên tránh cho phép ngôn ngữ SQL hoặc PL/SQL thực hiện chuyển đổi ngầm định thay cho bạn. Bất cứ khi nào có thể, hãy sử dụng chức năng chuyển đổi để đảm bảo rằng loại chuyển đổi phù hợp diễn ra Kiểu dữ liệu vô hướng trong C là gì?Kiểu dữ liệu vô hướng là kiểu dữ liệu có giá trị đơn, có thể được sử dụng cho các biến, hằng số riêng lẻ, v.v. . char là câu trả lời đúng. "Vô hướng" là kiểu dữ liệu chỉ có thể chứa một. giá trị tại một thời điểm (trái ngược với một mảng).
Kiểu dữ liệu vô hướng trong Python là gì?Các loại vô hướng
. Bất kỳ số thực nào có biểu diễn dấu phẩy động trong đó thành phần phân số được biểu thị bằng ký hiệu thập phân hoặc ký hiệu khoa học e. g. 1. 23, 3. 4556789e2. phức tạp. Một số có phần thực và phần ảo được biểu diễn dưới dạng x + 2y. bool. Dữ liệu có một trong hai giá trị tích hợp Đúng hoặc Sai.
Vô hướng trong lập trình là gì?Vô hướng nghĩa là gì? . Nó là một thành phần duy nhất giả định một loạt các giá trị số hoặc chuỗi. Một giá trị vô hướng được liên kết với mọi điểm trong không gian. a variable that holds one value at a time. It is a single component that assumes a range of number or string values. A scalar value is associated with every point in a space. |