FabulousCode Blog
Showing posts with label Oracle. Show all posts
Showing posts with label Oracle. Show all posts

Wednesday, September 17, 2025

ORACLE DATABASE ALL DATA INSERT STATEMENT

September 17, 2025 0
ORACLE DATABASE ALL DATA INSERT STATEMENT

 



আপনি যেটা লিখেছেন সেটা PL/SQL block এর মতো, কিন্তু সেখানে প্রতিটি INSERT শেষে semicolon (;) দিতে হবে। আর COMMIT;-ও শেষে থাকবে।

BEGIN

    INSERT INTO XX_ITEM_MASTER_TEST (INVENTORY_ITEM_ID, ITEM_CODE, DEPARTMENT)
    VALUES (1242897,'TTSF0000000000000117','Physical Test');

 

    INSERT INTO XX_ITEM_MASTER_TEST (INVENTORY_ITEM_ID, ITEM_CODE, DEPARTMENT)
    VALUES (1242799,'TTSG0000000000000157','Physical Test');

 

    COMMIT;
END;
/

Wednesday, July 16, 2025

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

July 16, 2025 0
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 ব্যবহার না করে সিকোয়েন্স দিয়ে অটো ইনক্রিমেন্ট করুন।

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

Tuesday, May 27, 2025

Oracle Jdeveloper Clean Command

May 27, 2025 0
Oracle Jdeveloper Clean Command

Saturday, December 21, 2019

Oracle Safe Type Mapping .NET Data Access layer

December 21, 2019 0
Oracle Safe Type Mapping  .NET Data Access layer


using DAL.Common;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Web;

namespace Presentation.Models
{
public class T_DataManager
{
/**** Method Implemented By Afzal Hossain Date:08-Dec-2019 ( Mobile NO: 01960319000 ) *****/

public OutputResult TExecuteNonQuery<T>(OracleConnection Conn, string SpName, params object[] parameters) where T : class, new()
{
OutputResult objResult = new OutputResult() { ResultId = 0, ErrorNo = 0, Message = "0", NoofRows = 0 };
try
{
using (var cmd = Conn.CreateCommand())
{
cmd.CommandText = SpName;
cmd.CommandType = CommandType.StoredProcedure;

if (parameters != null)
foreach (var p in parameters)
cmd.Parameters.Add(p);

Conn.Open();
cmd.ExecuteNonQuery();

objResult.ResultId = int.Parse(cmd.Parameters["oIdentityValue"].Value.ToString());
objResult.NoofRows = int.Parse(cmd.Parameters["oRowCount"].Value.ToString());

if (objResult.NoofRows > 0 && objResult.ResultId > 0)
{
objResult.Message = "Operation successful.";
}
else
{
if (objResult.ErrorNo == -1)
{
objResult.Message = "Operation failed.";
}
}
}
}
catch (Exception ex)
{
objResult.ExceptionError = ex.ToString();
objResult.ResultId = 0;
objResult.ErrorNo = -1;
objResult.Message = "Exception: Operation failed.";
}
finally
{
Conn.Close();
}
return objResult;
}
///****************** BASIC USAGES****************

//OutputResult result = new OutputResult();
//string SpName = @"XX_SP_SET_TestTable";
//DataManager dm = new DataManager();
//TEST_Table table = new TEST_Table() { TEST_ID = 0, TEXT_COLUMN = "Md. Afzal Hossain", NUMBER_COLUMN = 1234, DATETIME_COLUMN = "8-Dec-2019" };


//List<OracleParameter> parameterList = new List<OracleParameter>();
//parameterList.Add(new OracleParameter("SaveOption", 1));
//parameterList.Add(new OracleParameter("TEST_ID", table.TEST_ID));
//parameterList.Add(new OracleParameter("TEXT_COLUMN", table.TEXT_COLUMN));
//parameterList.Add(new OracleParameter("NUMBER_COLUMN", table.NUMBER_COLUMN));
//parameterList.Add(new OracleParameter("DATETIME_COLUMN", table.DATETIME_COLUMN));
//parameterList.Add(new OracleParameter("IdentityValue", OracleDbType.Int32, 20, ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Default, null));
//parameterList.Add(new OracleParameter("RowCount", OracleDbType.Int32, 20, ParameterDirection.Output, false, 0, 0, "", DataRowVersion.Default, null));
//OracleParameter[] parameters = parameterList.ToArray();

//result = dm.TExecuteNonQuery<TEST_Table>(dm.getConnection_Oracle(), SpName, parameters);
// */
public List<T> ReturnListBySP<T>(OracleConnection Conn, string SpName, params object[] parameters) where T : class, new()
{
using (var command = Conn.CreateCommand())
{
command.CommandText = SpName;
command.CommandType = CommandType.StoredProcedure;
Conn.Open();
if (parameters != null)
foreach (var p in parameters)
command.Parameters.Add(p);

using (var reader = command.ExecuteReader())
{
var lst = new List<T>();
var lstColumns = new T().GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).ToList();
while (reader.Read())
{
var newObject = new T();
for (var i = 0; i < reader.FieldCount; i++)
{
var name = reader.GetName(i);
PropertyInfo prop = lstColumns.FirstOrDefault(a => a.Name.ToLower().Equals(name.ToLower()));
if (prop == null)
{
continue;
}
var val = reader.IsDBNull(i) == true ? "" : reader[i];
prop.SetValue(newObject, val.ToString(), null);
}
lst.Add(newObject);
}
Conn.Close();
return lst;
}
}
}
// /*
//List<OracleParameter> parameterList = new List<OracleParameter>();
// parameterList.Add(new OracleParameter("pLoadOption", 1));
// parameterList.Add(new OracleParameter("pTest_ID", table.TEST_ID));
// parameterList.Add(new OracleParameter ("cResult_Cursor", OracleDbType.RefCursor, ParameterDirection.Output));
// OracleParameter[] parameters = parameterList.ToArray();

// var lst = dm.ReturnListBySP<ViewModelTEST_Table>(dm.getConnection_Oracle(), SpName, parameters);
// */


}
}