Sequences
ال Sequences تستخدم في الأوراكل لتوليد رقم unique بدلاً من data type uniqueidentifier المستخدمة في SQL server.
الهدف من استخدام Sequences التي تقوم بتوليد رقم unique من أجل استخدامه كمفتاح أساسي (PK) للجدول، وهي تستخدم من أجول توليد أرقام (Auto number).
الأن في المثال التالي سوف نقوم بعملية كيف يتم انشاء Sequences في الأوراكل
create SEQUENCE LOCATIONS_SEQ
INCREMENT BY 100
START WITH 1
MAXVALUE 9900
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER
في المثال التالي سوف نعرف كيف يتم استدعاء SEQUENCE التي قمنا بإنشاءها أعلى :
create OR REPLACE PROCEDURE ADD_LOCATION (
p_location_id OUT NUMBER,
p_street_address IN VARCHAR2,
p_postal_code IN VARCHAR2,
p_city IN VARCHAR2,
p_state_province IN VARCHAR2,
p_country_id IN CHAR
)
AS
BEGIN
insert INTO LOCATIONS (
LOCATION_ID,
STREET_ADDRESS,
POSTAL_CODE,
CITY,
STATE_PROVINCE,
COUNTRY_ID)
VALUES (
LOCATIONS_SEQ.NEXTVAL,
p_street_address,
p_postal_code,
p_city,
p_state_province,
p_country_id
;
select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
END ADD_LOCATION;
تشاهدون أنه وضعنا القيمة LOCATIONS_SEQ.NEXTVAL للحقل LOCATION_ID في جملة الإضافة التي تم وضعها داخل ال Stored procedure، فهكذا يتم استخدام ال Sequences حيث نقوم بوضع اسم ال Sequence مع وضع نقطه ثم NEXTVAL.
select LOCATIONS_SEQ.CURRVAL INTO p_location_id FROM DUAL;
هنا تم عمل جملة استعلام لل Sequence من الجدول DUAL بحيث سوف تحضر لنا القيمة الحالية التي تم تولديها لل LOCATIONS_SEQ ويتم تخزينها داخل المتغير p_location_id.
الأن سوف أضع لكم الكود الدوت نت من أجل عملية استدعاء البروسجير لكيفية الإضافة واسترجاع قيمة ال LOCATIONS_SEQ الحالية:
'C#
OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "ADD_LOCATION";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_location_id", OracleType.Number).Direction =
ParameterDirection.Output;
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value =
"123 Any Street";
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040";
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West";
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL";
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US";
OracleString rowId;
conn.Open();
int rowsAffected = cmd.ExecuteOracleNonQuery(out rowId);
conn.Close();
response.write("Rows affected: " + rowsAffected);
response.write("Location ID: " +cmd.Parameters["p_location_id"].Value);
'VB.NET
Dim conn As OracleConnection = New OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;")
Dim cmd As OracleCommand = New OracleCommand
cmd.Connection = conn
cmd.CommandText = "ADD_LOCATION"
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("p_location_id", OracleType.Number).Direction = ParameterDirection.Output
cmd.Parameters.Add("p_street_address", OracleType.VarChar).Value = "123 Any Street"
cmd.Parameters.Add("p_postal_code", OracleType.VarChar).Value = "33040"
cmd.Parameters.Add("p_city", OracleType.VarChar).Value = "Key West"
cmd.Parameters.Add("p_state_province", OracleType.VarChar).Value = "FL"
cmd.Parameters.Add("p_country_id", OracleType.VarChar).Value = "US"
Dim rowId As OracleString
conn.Open
Dim rowsAffected As Integer = cmd.ExecuteOracleNonQuery(rowId)
conn.Close
response.write("Rows affected: " + rowsAffected)
response.write("Location ID: " + cmd.Parameters("p_location_id").Value)
--------------------
منذ متى يا أقزام بدأ يروادكم التفكير بالتعالي على عمالقة القسام؟