Oracle Sequence তৈরির সঠিক উপায়: টেবিলের সর্বোচ্চ ID থেকে শুরু করা - fabulouscode

Wednesday, July 16, 2025

Oracle Sequence তৈরির সঠিক উপায়: টেবিলের সর্বোচ্চ ID থেকে শুরু করা

 

Oracle Sequence তৈরির সঠিক উপায়: টেবিলের সর্বোচ্চ ID থেকে শুরু করা

Oracle ডাটাবেসে যখন আমরা কোনো টেবিলে নতুন রেকর্ড যোগ করার সময় ইউনিক আইডি অটো জেনারেট করতে চাই, তখন সাধারণত Sequence ব্যবহার করা হয়। তবে অনেক সময় টেবিলে আগে থেকেই ডাটা থাকায় নতুন সিকোয়েন্স তৈরি করার সময় শুরু করার মানটা হতে হবে টেবিলের সর্বোচ্চ আইডির পরবর্তী সংখ্যা।

এখানে দেখানো হবে কিভাবে PL/SQL ব্লক ব্যবহার করে টেবিলের সর্বোচ্চ SAMPLE_ID বের করে সেই মান থেকে সিকোয়েন্স তৈরি করবেন।


সমস্যা

ধরা যাক, আপনার টেবিলের নাম XXPWC.PWC_OM_TEST_REQUEST_DEPT_SEND এবং এতে একটি কলাম আছে SAMPLE_ID যেখানে ইউনিক আইডি রাখা হয়।
আপনি একটি সিকোয়েন্স তৈরি করতে চান যা সর্বোচ্চ SAMPLE_ID থেকে ১ বাড়িয়ে শুরু হবে।


সমাধান

আমরা নিচের স্টেপগুলো অনুসরণ করব:

  1. টেবিল থেকে MAX(SAMPLE_ID) বের করব

  2. পুরানো সিকোয়েন্স থাকলে সেটি ড্রপ করব

  3. নতুন সিকোয়েন্স তৈরি করব যা MAX(SAMPLE_ID) + 1 থেকে শুরু হবে


PL/SQL ব্লক কোড

plsql

DECLARE v_max_id NUMBER; BEGIN -- ১. টেবিল থেকে সর্বোচ্চ SAMPLE_ID বের করা SELECT NVL(MAX(SAMPLE_ID), 0) INTO v_max_id FROM XXPWC.PWC_OM_TEST_REQUEST_DEPT_SEND; -- ২. যদি পুরানো সিকোয়েন্স থাকে, সেটি ড্রপ করা হবে BEGIN EXECUTE IMMEDIATE 'DROP SEQUENCE SAMPLE_ID_SEQ'; EXCEPTION WHEN OTHERS THEN IF SQLCODE != -2289 THEN -- ORA-02289: sequence does not exist, তখন এড়িয়ে যাব RAISE; END IF; END; -- ৩. নতুন সিকোয়েন্স তৈরি করা হবে সর্বোচ্চ SAMPLE_ID + 1 থেকে শুরু করে EXECUTE IMMEDIATE 'CREATE SEQUENCE SAMPLE_ID_SEQ START WITH ' || (v_max_id + 1) || ' INCREMENT BY 1 NOCACHE NOCYCLE'; DBMS_OUTPUT.PUT_LINE('Sequence SAMPLE_ID_SEQ created starting at ' || (v_max_id + 1)); END; /

কিভাবে ব্যবহার করবেন?

  • উপরের কোডটি Oracle SQL Developer বা আপনার পছন্দের SQL টুলে রান করুন।

  • এটি পুরানো সিকোয়েন্স থাকলে তা ড্রপ করবে এবং নতুন সিকোয়েন্স তৈরি করবে।

  • নতুন সিকোয়েন্স নাম হবে SAMPLE_ID_SEQ এবং এটি সর্বোচ্চ SAMPLE_ID থেকে পরবর্তী মান দিয়ে শুরু হবে।


কেন এটি প্রয়োজন?

  • অনেক সময় ডাটাবেস মাইগ্রেশন বা ম্যানুয়াল ডাটা ইনসার্টের কারণে টেবিলে ইতিমধ্যেই ডাটা থাকে।

  • সিকোয়েন্স যদি সর্বদা 1 থেকে শুরু করে, তাহলে নতুন ইনসার্টে ডুপ্লিকেট কী এরর হবে।

  • তাই MAX(ID) + 1 থেকে সিকোয়েন্স শুরু করা জরুরি।


অতিরিক্ত টিপস

  • যদি Multi-user environment এ concurrency issue থেকে বাঁচতে চান, তাহলে Sequence ব্যবহার করাই সেরা উপায়।

  • সরাসরি MAX(ID)+1 ব্যবহার না করে সিকোয়েন্স দিয়ে অটো ইনক্রিমেন্ট করুন।

  • আপনার ডাটাবেসে সিকোয়েন্স তৈরি ও ড্রপ করার পারমিশন থাকতে হবে।

No comments:

Post a Comment

I am Safiqul Islam Tuhin