PL/SQL programs - stored procedure/functions, uses fixed-length (CHAR) and variable-length (VARCHAR2) and does DML operation. However, the maximum size of these data types are not same in oracle database and in PL/SQL context.
In oracle database, CHAR type max can be of size up to 255 bytes and VARCHAR2 data type can be of size up to 2000 bytes. However, in PL/SQL, maximum size of CHAR and VARCHAR2 data type are 32767. So , how conversion between these data types handled internally -
Consider the following scenario: 1. Read data from database in PL/SQL context 2. Write data from PL/SQL context to database
1. Read data from database in PL/SQL program (Database-to-variable conversion):-
2. Write data from PL/SQL program to database column (Variable-to-database conversion): -
Blank padding comparison is being used when comparison is carried out between two CHAR type. In this approach, PL/SQL appends blanks to smaller of two CHAR type under comparison up to the length of the longer value and then do the comparison.
Note: PL/SQL does not actually modify the variable's value.It make a copy if it and modify this temporary one and do comparison.
Non-blank padding comparison is carried when at least one of the operand under comparison is variable length string. In this approach, any variable is not modified, just each character is compared with other and result is returned.
Try this question, considering above conversion concept:What will be outcome of this PL/SQL anonymous program unit ?
when we execute it, it displays - Partner and parent partner are not same. Reason behind is , sales_partner_name is CHAR type and parent_sales_partner_name is of VARCHAR2 type. sales_partner_name is appended with 5 spaces and parent_sales_partner_name is just five character string, so when comparison happens PL/SQL uses Non-blank padding comparison and matches character by character , so it return FALSE and ELSE block is executed.
How to deal with such problem - To get around problems like this, we should always RTRIM CHAR values when they are involved in any kind of comparison. RTRIM removes trailing spaces.
Similarly, we can use RPAD - add trailing spaces, however it requires knowledge of length.
Now, un-comment the second IF statement in above program and comment first one, execute it again. - Output will be Partner and parent partner are same(IF block executed).
=========End of the post=======
In oracle database, CHAR type max can be of size up to 255 bytes and VARCHAR2 data type can be of size up to 2000 bytes. However, in PL/SQL, maximum size of CHAR and VARCHAR2 data type are 32767. So , how conversion between these data types handled internally -
Consider the following scenario: 1. Read data from database in PL/SQL context 2. Write data from PL/SQL context to database
1. Read data from database in PL/SQL program (Database-to-variable conversion):-
- When we SELECT or FETCH data from a CHAR database column into a VARCHAR2 variable in PL/SQL program, the trailing spaces of CHAR type are retained.
- When we SELECT or FETCH from a VARCHAR2 database column into a CHAR variable, PL/SQL automatically pads the value with spaces out to the maximum length.
2. Write data from PL/SQL program to database column (Variable-to-database conversion): -
- When we INSERT or UPDATE a CHAR variable into a VARCHAR2 database column, the SQL kernel does not trim the trailing blanks before performing the change. Consider following:DECLAREAfter insert of this org_id in database, column will store 'VIOA ', with 6 spaces.
-- It will create a fixed length string of length 10 by appending 6 spaces .
org_id CHAR(10) := 'VIOA'; - when we INSERT or UPDATE a VARCHAR2 variable into a CHAR database column, the SQL kernel automatically pads the variable-length string with spaces out to the maximum (fixed) length specified when the table was created, and places that expanded value into the database.
Blank padding comparison is being used when comparison is carried out between two CHAR type. In this approach, PL/SQL appends blanks to smaller of two CHAR type under comparison up to the length of the longer value and then do the comparison.
Note: PL/SQL does not actually modify the variable's value.It make a copy if it and modify this temporary one and do comparison.
Non-blank padding comparison is carried when at least one of the operand under comparison is variable length string. In this approach, any variable is not modified, just each character is compared with other and result is returned.
Try this question, considering above conversion concept:What will be outcome of this PL/SQL anonymous program unit ?
set serveroutput on DECLARE sales_partner_name CHAR (30) DEFAULT 'HOUGH'; parent_sales_partner_name VARCHAR2 (25) DEFAULT 'HOUGH'; BEGIN IF sales_partner_name = parent_sales_partner_name --IF RTRIM(sales_partner_name) = parent_sales_partner_name THEN DBMS_OUTPUT.PUT_LINE('Partner and parent partner are same'); ELSE DBMS_OUTPUT.PUT_LINE('Partner and parent partner are not same'); END IF; END; /
How to deal with such problem - To get around problems like this, we should always RTRIM CHAR values when they are involved in any kind of comparison. RTRIM removes trailing spaces.
Similarly, we can use RPAD - add trailing spaces, however it requires knowledge of length.
Now, un-comment the second IF statement in above program and comment first one, execute it again. - Output will be Partner and parent partner are same(IF block executed).
=========End of the post=======
Đặt vé máy bay tại Aivivu, tham khảo
ReplyDeleteVe may bay di My
các chuyến bay từ mỹ về việt nam
vé máy bay nhật việt vietjet
giá vé máy bay từ đức về việt nam
giá vé máy bay từ canada về Việt Nam
Các chuyến bay từ Incheon về Hà Nội hôm nay
danh sách khách sạn cách ly ở tphcm
6D118333DD
ReplyDeleteCanlı Show Whatsapp
Ücretli Show
Görüntülü Show Uygulamaları
ReplyDeleteThe new project has been receiving positive feedback from the team, highlighting its innovative approach and potential impact. As we continue to refine the details, I encourage everyone to stay engaged and share their insights when possible. For additional information, you can visit the official page, where you can learn more about the project's goals and progress. read more. Overall, this initiative promises to bring significant benefits to our community and stakeholders.
In today’s fast-paced packaging and printing industry, durability and visual appeal are more important than ever. That’s where BOPP films play a vital role, offering excellent clarity, moisture resistance, and a smooth finish for printed materials. Many businesses are now relying on these films to enhance product packaging, book covers, and marketing materials. The growing demand for eco-friendly and cost-effective solutions has further boosted their popularity. In the middle of modern packaging innovation, Bopp Thermal Lamination Film stands out as a reliable choice for improving both protection and presentation across multiple industries and applications worldwide.
ReplyDelete