উদাহরণস্বরূপ, এমএস-এসকিউএল এ, আপনি একটি ক্যোয়ারী উইন্ডো খুলতে এবং নিম্নলিখিতটি চালাতে পারেন:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT *
FROM dbo.PubLists
WHERE Name = @List
পোস্টগ্রিসএসকিউএল এ কিভাবে হয়? এটা করা যায়?
উদাহরণস্বরূপ, এমএস-এসকিউএল এ, আপনি একটি ক্যোয়ারী উইন্ডো খুলতে এবং নিম্নলিখিতটি চালাতে পারেন:
DECLARE @List AS VARCHAR(8)
SELECT @List = 'foobar'
SELECT *
FROM dbo.PubLists
WHERE Name = @List
পোস্টগ্রিসএসকিউএল এ কিভাবে হয়? এটা করা যায়?
উত্তর:
সম্পূর্ণ উত্তরটি অফিসিয়াল পোস্টগ্র্যাস এসকিউএল ডকুমেন্টেশনে অবস্থিত ।
আপনি নতুন PG9.0 বেনামে কোড ব্লক বৈশিষ্ট্যটি ব্যবহার করতে পারেন ( http://www.postgresql.org/docs/9.1/static/sql-do.html )
DO $$
DECLARE v_List TEXT;
BEGIN
v_List := 'foobar' ;
SELECT *
FROM dbo.PubLists
WHERE Name = v_List;
-- ...
END $$;
এছাড়াও আপনি শেষ সন্নিবেশ আইডি পেতে পারেন :
DO $$
DECLARE lastid bigint;
BEGIN
INSERT INTO test (name) VALUES ('Test Name')
RETURNING id INTO lastid;
SELECT * FROM test WHERE id = lastid;
END $$;
;
পরে এর END $$
মতো ভুলে যাবেন না END $$;
ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead. CONTEXT: PL/pgSQL function inline_code_block line 7 at SQL statement
DO $$
DECLARE
a integer := 10;
b integer := 20;
c integer;
BEGIN
c := a + b;
RAISE NOTICE'Value of c: %', c;
END $$;
:
। @ আচিলিস-রাম-নাকিরকান্তি আপনি কি এই select
বিবৃতিতে আরও পরিষ্কার করে তুলতে একটি উদাহরণ যুক্ত করতে পারেন ?
তুমি ব্যবহার করতে পার:
\set list '''foobar'''
SELECT * FROM dbo.PubLists WHERE name = :list;
তা করতে হবে
psql
কনসোল থেকে উপলব্ধ । আপনি আপনার অ্যাপের এসকিউএল এ এটি লিখতে সক্ষম হবেন না।
postgresql
এবং এটি সবচেয়ে স্বল্পতম বিকল্প। সাধারণত আমি এতে সন্তুষ্ট হয়েছি postgresql
: তবে এটি
এখানে plpgsql এ ভেরিয়েবল ব্যবহারের উদাহরণ রয়েছে:
create table test (id int);
insert into test values (1);
insert into test values (2);
insert into test values (3);
create function test_fn() returns int as $$
declare val int := 2;
begin
return (SELECT id FROM test WHERE id = val);
end;
$$ LANGUAGE plpgsql;
SELECT * FROM test_fn();
test_fn
---------
2
কটাক্ষপাত আছে plpgsql ডক্স আরও তথ্যের জন্য।
আমি \set
স্ক্রিপ্টিং ভেরিয়েবল ঘোষণার জন্য তারা ব্যবহার করি এমন কিছু অন্যান্য নথি জুড়ে এসেছি তবে মানটি ধ্রুবক মানের মতো বলে মনে হয় এবং আমি এমন কোনও উপায় খুঁজে পাচ্ছি যা একটি ধ্রুবক ভেরিয়েবলের মতো না হয়ে চলকের মতো কাজ করতে পারে।
প্রাক্তন:
\set Comm 150
select sal, sal+:Comm from emp
এখানে sal
মানটি যা সারণীতে উপস্থিত রয়েছে 'এম্প' এবং comm
ধ্রুবক মান।
Postgresql এর খালি ভেরিয়েবল নেই, আপনি একটি অস্থায়ী টেবিল ব্যবহার করতে পারেন। ভেরিয়েবলগুলি কেবল কোড ব্লকে বা ব্যবহারকারী-ইন্টারফেস বৈশিষ্ট্য হিসাবে উপলব্ধ।
আপনার যদি খালি ভেরিয়েবলের প্রয়োজন হয় তবে আপনি একটি অস্থায়ী টেবিল ব্যবহার করতে পারেন:
CREATE TEMP TABLE list AS VALUES ('foobar');
SELECT dbo.PubLists.*
FROM dbo.PubLists,list
WHERE Name = list.column1;
@ নাদ 2000 এর উত্তর এবং @ পাভেলের উত্তরের ভিত্তিতে এখানে বিল্ডিং , আমি এখানেই আমার ফ্লাইওয়ে মাইগ্রেশন স্ক্রিপ্টগুলি শেষ করেছি। যেখানে ডেটাবেস স্কিমাটি ম্যানুয়ালি সংশোধন করা হয়েছিল সেই দৃশ্যের জন্য পরিচালনা করা।
DO $$
BEGIN
IF NOT EXISTS(
SELECT TRUE FROM pg_attribute
WHERE attrelid = (
SELECT c.oid
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE
n.nspname = CURRENT_SCHEMA()
AND c.relname = 'device_ip_lookups'
)
AND attname = 'active_date'
AND NOT attisdropped
AND attnum > 0
)
THEN
RAISE NOTICE 'ADDING COLUMN';
ALTER TABLE device_ip_lookups
ADD COLUMN active_date TIMESTAMP;
ELSE
RAISE NOTICE 'SKIPPING, COLUMN ALREADY EXISTS';
END IF;
END $$;
সরকারী সিএলআই ক্লায়েন্ট "পিএসকিএল" এর জন্য এখানে দেখুন । এবং "pgAdmin3" 1.10 (এখনও বিটাতে রয়েছে) " pgScript " রয়েছে।
ব্যবহারের জন্য ভেরিয়েবলগুলি উদাহরণস্বরূপ পরিবর্তন করুন:
DO $$
DECLARE name_pk VARCHAR(200);
BEGIN
select constraint_name
from information_schema.table_constraints
where table_schema = 'schema_name'
and table_name = 'table_name'
and constraint_type = 'PRIMARY KEY' INTO name_pk;
IF (name_pk := '') THEN
EXECUTE 'ALTER TABLE schema_name.table_name DROP CONSTRAINT ' || name_pk;