এসকিউএল ত্রুটি "ORA-01722: অবৈধ নম্বর"


104

কারও জন্য খুব সহজ একটি, নিম্নলিখিত সন্নিবেশটি আমাকে দিচ্ছে

ORA-01722: অবৈধ নম্বর

কেন?

INSERT INTO CUSTOMER VALUES (1,'MALADY','Claire','27 Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (2,'GIBSON','Jake','27 Smith St Caulfield','0415 713 598');
INSERT INTO CUSTOMER VALUES (3,'LUU','Barry','5  Jones St Malvern','0413 591 341');
INSERT INTO CUSTOMER VALUES (4,'JONES','Michael','7  Smith St Caulfield','0419 853 694');
INSERT INTO CUSTOMER VALUES (5,'MALADY','Betty','27 Smith St Knox','0418 418 347');

28
সুতরাং ... টেবিল সংজ্ঞা কি জন্য CUSTOMER? আপনি প্রয়োজনীয় অর্ধেক তথ্য দিয়েছেন।
গ্রেগ হিউগিল

4
টেলিফোন নম্বরগুলি হ'ল একমাত্র জিনিস যা যুক্তিসঙ্গতভাবে সংখ্যার হিসাবে সংজ্ঞায়িত হতে পারে যা আপনার ডেটা সংখ্যাসূচক হিসাবে উপস্থাপন করে না (স্পেসগুলি সংখ্যাসূচক নয়)। সুতরাং: আপনার টেবিলের সংজ্ঞাটি পরীক্ষা করুন এবং আপনার ইনপুট বিবৃতিগুলির সাথে তুলনা করুন।
এপিসি

11
লোকেরা কেন এই প্রশ্নটিতে ভোট দেবে? ডেটাবেজে নতুন যারা, তাদের পক্ষে এটি একটি অদ্ভুত ত্রুটি। আমি দেখতে পাচ্ছি যে কোটগুলি সহ মানগুলি কীভাবে যুক্ত করা এটি এটিকে একটি স্ট্রিংয়ের মতো দেখায়। এটি কেবল নির্ভর করে যে ডাটাবেসটি কীভাবে সেটআপ করা হয়। এটি সমস্ত স্ট্রিং বা সংখ্যাগুলি কেবল ক্ষেত্রের উপর নির্ভর করে। ডাটাবেসটি তৈরি করার সময় এটি একটি ত্রুটি ছিল।
শিষ্প

উপরের পরিস্থিতিটি আসার একটি উদাহরণ: টেবিল_1 (রোল নাম্বার) মানগুলি ('123') sertোকান; যেখানে রোল নাম্বার হ'ল "সংখ্যা" টাইপের কলাম।
haniশানী গুপ্ত

4
"ফিরে এসে আমি তাক থেকে একটি বই টেনেছিলাম এবং একটি ওরাকল প্রশ্নের উত্তর দিয়েছি। স্ট্যাকের সময় আমি এখনও পারদর্শী, আমি যে জ্ঞান রেখেছি তা পেরেছি, তবে এখনও আমার গ্রহণযোগ্যতা নেই। "
হারুন

উত্তর:


123

একটি ORA-01722 ত্রুটি ঘটে যখন একটি অক্ষরের স্ট্রিংটিকে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করা হয় এবং স্ট্রিংটিকে সংখ্যায় রূপান্তর করা যায় না।

আপনার টেবিলের সংজ্ঞাটি না দেখে মনে হচ্ছে আপনি নিজের মান তালিকার শেষে সংখ্যার ক্রমটি একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করছেন এবং যে স্থানগুলি এটির সীমিত করে সেগুলি এই ত্রুটিটি ছুঁড়ে ফেলছে। তবে আপনি আমাদের যে তথ্য দিয়েছেন তার উপর ভিত্তি করে এটি কোনও ক্ষেত্রে (প্রথমটি ব্যতীত) ঘটতে পারে।


4
এছাড়াও লক্ষ্য করুন যে "(নাল)" দিয়ে ম্যানুয়ালি কোনও ক্ষেত্র আপনাকে সম্পূর্ণ ত্রুটি দেবে। যদি ডিফল্টটি নাল হয় এবং আপনি সম্পূর্ণ না করেন তবে এটি (নাল) দিয়ে স্বয়ংক্রিয়ভাবে পূর্ণ হবে তবে আপনি টাইপ করার সময় এটি একই হয় না।
বোগদান.রুসু

এহ, "স্ট্রিংটিকে কোনও সংখ্যায় রূপান্তর করা যায় না" - এটি বিন্দু নয়। স্ট্রিং সিএন সংখ্যায় রূপান্তরিত হতে পারে। এখানে বিন্দুটি কোনও স্ট্রিং কলামে একটি সংখ্যার বিপরীত রূপান্তর, কিন্তু ওরাকল এটি স্বয়ংক্রিয়ভাবে করে না: আপনাকে নিজের স্ট্রিং তৈরি করতে হবে, আপনার এসকিউএল এক্সপ্রেশনটিতে স্পষ্টভাবে মান চিহ্নিত করে, এটি '' বা "" দ্বারা ঘিরে রাখতে হবে ।
ফ্রান্টা

26

ধরুন টেলিফোন নম্বরটি সংজ্ঞায়িত করা হয়েছে NUMBERতাই ফাঁকা অংশগুলিতে রূপান্তর করা যাবে না:

create table telephone_number (tel_number number);
insert into telephone_number values ('0419 853 694');

উপরেরটি আপনাকে ক

ORA-01722: অবৈধ নম্বর


18

এটি সমাধানের একটি উপায় এখানে। অ-সংখ্যাসূচক অক্ষরগুলি সরান তারপরে এটি একটি সংখ্যা হিসাবে কাস্ট করুন।

cast(regexp_replace('0419 853 694', '[^0-9]+', '') as number)

6
এটি করার ফলে শীর্ষস্থানীয় ০ টি সরিয়ে ফেলবে
জো সি

4
এটি আসল ওপিতে যায় - আপনি যদি '0419 853 694' এর মতো মানগুলি সংরক্ষণ করতে চান তবে আপনার টেবিল কলামটি "সংখ্যা" টাইপের নয়, কারণ সংখ্যার শীর্ষস্থানীয় জিরো থাকতে পারে না। আমার ক্ষেত্রে তবে এটি আমার প্রয়োজন ঠিক তাই, gylacrosse!
হিপোকিতো

10

এই ত্রুটিটি যখন আপনি ডিবায় একটি সংখ্যাসূচক কলামে অ-সংখ্যাসূচক মান সন্নিবেশ করানোর চেষ্টা করছেন তখনই মনে হচ্ছে আপনার শেষ ক্ষেত্রটি সংখ্যাসূচক হতে পারে এবং আপনি এটি ডাটাবেসে স্ট্রিং হিসাবে প্রেরণের চেষ্টা করছেন। আপনার শেষ মান পরীক্ষা করুন।


8

ভাল এটি হতে পারে:

SELECT t.col1, t.col2, ('test' + t.col3) as test_col3 
FROM table t;

যেখানে ওরাকলে সংমিশ্রনের জন্য অপারেটরটি ব্যবহৃত হয় ||না+

এই ক্ষেত্রে আপনি পাবেন: ORA-01722: invalid number ...


4
এটা ভাল গুলোর একটি. আরেকটি বিষাক্ত নিয়তি এটি হতে পারে। আপনি একটি নির্বাচন ফিল্ডলিস্টে যেমন - টি.ফিল্ডনামে কোনও ক্ষেত্র মন্তব্য করেছিলেন। পরে আপনি সেই লাইনটি মন্তব্যটি সরিয়ে ফেলতে চাইছেন, তবে একটি মন্তব্য করা চরিত্রটি দুর্ঘটনাক্রমে চলে গেছে। সুতরাং এখানে আছে: - t.fieldname। এটি আমার সাথে ঘটেছিল, যখন আমি একটি খুব বড় প্রশ্নে কাজ করছিলাম, যেখানে জানোয়ারটি পুনর্গঠন করার সময় আমাকে শত শত কলম্বের মন্তব্য / আপত্তিহীন করতে হবে।
অলিপুনার

8

এই কারণ:

আপনি একটি এসকিউএল বিবৃতি কার্যকর করেছেন যা একটি স্ট্রিংকে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করেছিল, তবে এটি ব্যর্থ হয়েছিল।

হিসাবে ব্যাখ্যা করা হয়েছে:

এই ত্রুটিটি সমাধান করার জন্য:

গাণিতিক ক্রিয়াকলাপে কেবল সংখ্যাসূচক ক্ষেত্র বা অক্ষর ক্ষেত্রগুলিতে সংখ্যাসূচক মানগুলি ব্যবহার করা যেতে পারে। নিশ্চিত হয়ে নিন যে সমস্ত অভিব্যক্তি সংখ্যার কাছে মূল্যায়ন করে।


4

ওরাকল স্ট্রিং কলামের জন্য স্বয়ংক্রিয় স্ট্রিং 2 নাম্বার রূপান্তর করে মানগুলির ! তবে এসকিউএল-এর পাঠ্যগত তুলনার জন্য, ইনপুটটি অবশ্যই একটি স্ট্রিং হিসাবে স্পষ্টতই সীমিত করতে হবে: বিপরীত রূপান্তর সংখ্যা 2 স্ট্রিংটি স্বয়ংক্রিয়ভাবে সম্পাদিত হয় না, এসকিউএল-ক্যোয়ারী স্তরে নয়।

আমার এই প্রশ্নটি ছিল:

select max(acc_num) from ACCOUNTS where acc_num between 1001000 and 1001999;

এটি একটি সমস্যা উপস্থাপন করেছে: Error: ORA-01722: invalid number

আমি কেবল তাদের "স্ট্রিংস" তৈরি করতে "সংখ্যাসূচক" মানগুলিকে ঘিরে রেখেছি , কেবল তাদের স্পষ্টতই সীমিত করে তুলেছি :

select max(acc_num) from ACCOUNTS where acc_num between '1001000' and '1001999';

... এবং ভয়েলি: এটি প্রত্যাশিত ফলাফল প্রদান করে।

সম্পাদনা: এবং প্রকৃতপক্ষে: acc_numআমার টেবিলের করলটি হিসাবে সংজ্ঞায়িত করা হয়েছে String। সংখ্যাসূচক না হলেও, invalid numberরিপোর্ট করা হয়েছিল। এবং স্ট্রিং-সংখ্যাগুলির সুস্পষ্ট সীমিতকরণ সমস্যার সমাধান করেছে।

অন্যদিকে, ওরাকল স্ট্রিংসকে সংখ্যা হিসাবে বিবেচনা করতে পারে। সুতরাং স্ট্রিংগুলিতে সংখ্যাসূচক অপারেশন / ফাংশন প্রয়োগ করা যেতে পারে এবং এই অনুসন্ধানগুলি কাজ করে:

টেবিল থেকে সর্বোচ্চ (স্ট্রিং_কলাম) নির্বাচন করুন ;

টেবিল থেকে স্ট্রিং_কলামটি নির্বাচন করুন যেখানে স্ট্রিং_কলামের মধ্যে রয়েছে '2' এবং 'জেড' এর ;

টেবিল থেকে স্ট্রিং_কলামটি নির্বাচন করুন যেখানে স্ট্রিং_কলাম > '1';

টেবিল থেকে স্ট্রিং_কলামটি নির্বাচন করুন যেখানে স্ট্রিং_কলাম <= 'বি';


আমিও একই রকম পরিস্থিতির মুখোমুখি হয়েছি। ora-01722 অবৈধ সংখ্যাটি একটি নির্বাচিত বিবৃতিতে ট্রিগার করা হয়েছিল, একটি সন্নিবেশ বিবৃতি নয়। আমি টেবিলের সংজ্ঞাটি পরীক্ষা করে দেখতে পেলাম যে কলামটি সংখ্যার পরিবর্তে বর্ণচর ছিল তাই আমি সংখ্যাটির চারপাশে একক উক্তি যুক্ত করেছি
নিউটন ফ্যান 01

2

আমার ক্ষেত্রে রূপান্তর ত্রুটি কার্যকরী ভিত্তিক সূচক ছিল ছিল যা আমি সারণীর জন্য তৈরি করেছিলাম।

Inোকানো হচ্ছে তথ্য ঠিক আছে। বগি সূচক থেকে আসল ত্রুটিটি এসেছিল তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছে।

ভাল লাগবে, যদি ওরাকল এই ক্ষেত্রে আরও সুনির্দিষ্ট ত্রুটি বার্তা দিতে পারত।


2

আপনি যদি insert into...select * from...বিবৃতি করেন তবে 'অবৈধ নম্বর' ত্রুটিটি পাওয়াও সহজ।

ধরা যাক আপনার কাছে একটি টেবিল রয়েছে যার FUND_ACCOUNTদুটি কলাম রয়েছে:

AID_YEAR  char(4)
OFFICE_ID char(5)

এবং ধরা যাক আপনি সংখ্যাসূচক হওয়ার জন্য OFFICE_ID সংশোধন করতে চান, তবে সারণীতে বিদ্যমান সারি রয়েছে এবং আরও খারাপ, সারিগুলির কয়েকটিতে '' (ফাঁকা) এর একটি OFFICE_ID মান রয়েছে। ওরাকল-এ, আপনি যদি কোনও টেবিলের ডেটা থাকে তবে একটি কলামের ডেটাটাইপ পরিবর্তন করতে পারবেন না এবং একটি '' কে 0 এ রূপান্তর করতে এটির জন্য একটু কৌশল প্রয়োজন So সুতরাং এটি কীভাবে করবেন তা এখানে:

  1. একটি সদৃশ টেবিল তৈরি করুন: CREATE TABLE FUND_ACCOUNT2 AS SELECT * FROM FUND_ACCOUNT;
  2. মূল সারণী থেকে সমস্ত সারি মুছুন: DELETE FROM FUND_ACCOUNT;
  3. মূল টেবিলটিতে কোনও ডেটা না থাকলে, এটির OFFICE_ID কলামের ডেটা ধরণের পরিবর্তন করুন: ALTER TABLE FUND_ACCOUNT MODIFY (OFFICE_ID number);

  4. তবে তারপরে এখানে জটিল অংশ's কারণ কয়েকটি সারিতে ফাঁকা OFFICE_ID মান রয়েছে, আপনি যদি একটি সাধারণ কাজ করেন তবে আপনি INSERT INTO FUND_ACCOUNT SELECT * FROM FUND_ACCOUNT2"ORA-01722 অবৈধ সংখ্যা" ত্রুটি পাবেন। '' (ফাঁকা) OFFICE_ID গুলি 0 এর মধ্যে রূপান্তর করতে, আপনার sertোকানো বিবৃতিটি দেখতে হবে:

INSERT INTO FUND_ACCOUNT (AID_YEAR, OFFICE_ID) SELECT AID_YEAR, decode(OFFICE_ID,' ',0,OFFICE_ID) FROM FUND_ACCOUNT2;


এটি ত্রুটি ঘটতে পারে এমন একটি মামলার একটি জটিল উদাহরণ + নির্দিষ্ট ক্ষেত্রে কীভাবে সমাধান করা যায় তার ব্যাখ্যা, যা সম্ভবত প্রয়োগ নাও হতে পারে।
জান ডোগজেন

0

এটি আমার ক্ষেত্রেও ঘটেছিল তবে সমস্যাটি আসলে আলাদা ছিল: ফাইল এনকোডিং

ফাইলটি সঠিক ছিল তবে ফাইল এনকোডিংটি ভুল ছিল। এটি এসকিউএল সার্ভারের রফতানি ইউটিলিটি দ্বারা উত্পাদিত হয়েছিল এবং আমি এটি ইউনিকোড হিসাবে সংরক্ষণ করেছি।

ফাইলটি নিজেই টেক্সট সম্পাদকটিতে ভাল লাগছিল, তবে আমি যখন এটি খুলি *.bad এসকিউএল * লোডার প্রত্যাখ্যানিত রেখাগুলির সাহায্যে উত্পন্ন ফাইলটি আমি দেখতে পেলাম এটিতে প্রতিটি মূল চরিত্রের মধ্যে খারাপ চরিত্র রয়েছে। তারপর আমি যদিও এনকোডিং সম্পর্কে।

আমি নোটপ্যাড ++ দিয়ে মূল ফাইলটি খুললাম এবং এএনএসআইতে রূপান্তর করেছি এবং সবকিছু ঠিকঠাকভাবে লোড হয়েছে।


-1

ORA-01722 ত্রুটিটি বেশ সোজা। টম কিটের মতে :

আমরা বর্ণ বা তাত্পর্যপূর্ণতার জন্য বর্ণের স্ট্রিংটিকে একটি সংখ্যায় রূপান্তরিত করার চেষ্টা করেছি এবং এটি ব্যর্থ হচ্ছে।

তবে, যেখানে সমস্যাটি প্রায়শই প্রথমে স্পষ্ট হয় না। এই পৃষ্ঠাটি আমার সমস্যা সমাধান, অনুসন্ধান এবং সমাধান করতে সহায়তা করেছে। ইঙ্গিত: আপনি স্পষ্টভাবে বা সুস্পষ্টভাবে কোনও সংখ্যায় একটি স্ট্রিং রূপান্তর করছেন এমন জায়গাগুলি সন্ধান করুন। (আমি NVL(number_field, 'string')আমার কোড ছিল।)


-1

এটিতেও চেষ্টা করুন, যখন আপনার একটি অবৈধ সংখ্যা ত্রুটি রয়েছে

এর মধ্যে a.emplid হল সংখ্যা এবং b.emplid একটি varchar2 তাই আপনি যদি পাশের একটির রূপান্তর করতে চান

যেখানে to_char (a.emplid) = b.emplid


-4

এই ত্রুটিটি সরাতে আপনি সর্বদা TO_NUMBER () ফাংশন ব্যবহার করতে পারেন his এটি কর্মী ফোন নম্বর সংখ্যা (TO_NUMBER ('0419 853 694') হিসাবে অন্তর্ভুক্ত করা যেতে পারে;

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.