Tuesday, January 19, 2010

How to pass arrays from .Net C# to Oracle

Guess you have the following query

select * from table where table.id in (:MyIDList)

and you want to pass a number of IDs in the binding variable :MyIDList from C# to your Oracle SQL. If you now check the types of binding variables available for this job, you find out that this Oracle only supports scalar types as binding variables.
If you now dig further you find a couple of bright solution that are all based on splitting up some string (varchar2) into several elements. But due to the fact, that the length of varchar2 binding variables is limited to 4/32K SQL/PLSQL this is not a scalable solution to the problem.

Even if you think you are smart, and you try a string replace of :MyIDList with the elements like 'a','b','c' let me assure you that the limit for written elements in an in statement is 1000. Also your performance will degrade significantly, as the query cache won't recognize the SQL as being executed before and therefore Oracle has to recompile it with every execution.

Is it impossible to pass an variable length array to SQL?

Let me put it straight!
Yes and No.

In pure SQL it is impossible to pass a variable length array to SQL.

But in PL/SQL it is not.

"Yes great", you think, "but I need it in SQL!"

The trick is a PL/SQL wrapper to SQL!

Simply use the following ingredients:

Define 2 global types (and don't try to be smart here. We need IDType for couple of reasons):

CREATE OR REPLACE
type IDTYPE as object (
id varchar2(20)
);

CREATE OR REPLACE
type IDTABLETYPE as table of IDType;

In PL/SQL now create a package

CREATE OR REPLACE PACKAGE MYPACKAGE
as

type stringTableType is table of varchar2(20) index by binary_integer;

procedure GetMyTableByIDs
(
p_MyIDList IN stringTableType,
p_outRefCursor out RefCursorType
);

end;

CREATE OR REPLACE PACKAGE BODY MYPACKAGE
as

TYPE RefCursorType IS REF CURSOR;
procedure GetMyTableByIDs
(
p_MyIDList IN stringTableType,
p_outRefCursor out RefCursorType
)
as
iMyIDList IDTableType;
begin

iMyIDList := IDTableType();
iMyIDList.Extend(p_MyIDList.count);

for i in p_MyIDList.First .. p_MyIDList.Last
loop
iMyIDList(i) := IDType(p_MyIDList(i));
end loop;

open p_outRefCursor
for
select * from table where table.id in (select id from table(iMyIDList));

end GetMyTableByIDs;

end;

What is going on here?

First thing you notice is that we have 2 very similar array (table) types.

Globally we defined the

type IDTABLETYPE as table of IDType -- IDType is varchar2(20)

This is in Oracle terms a "Nested Table". This type is available in SQL and PL/SQL. IDType brings the property "ID" of type varchar2(20).
In PL/SQL we defined the very similar type:

type stringTableType is table of varchar2(20) index by binary_integer;

This is an "index by table" or "associative array" in oracle terms. Associative arrays are better understood as "HashTable" and are available in PL/SQL only. For a more detailed explanation of the differences please have a look at "Collection Types in PL/SQL".

But why do you copy the arrays one by one?

Because you now see that Oracle has obviously 2 different development units for SQL and PL/SQL. And they do not seem to talk very much together.

The result of 3 days in short:
  • There is no way to pass a nested table as parameter to a stored procedure in C#
  • There is no way to use a associative array in SQL
  • There is no way to assign/initialize a nested table to/with an associative array

Great, but how do we use it in C#?

OracleConnection conn = new OracleConnection("MyConnectionString");
OracleCommand cmd = conn.CreateCommand();
cmd.CommandText = "MyPackage.GetMyTableByIDs";
cmd.CommandType = CommandType.StoredProcedure;
cmd.BindByName = true;

cmd.Parameters.Add(new OracleParameter("p_outRefCursor", OracleDbType.RefCursor)).Direction = ParameterDirection.Output;

cmd.Parameters.Add(new OracleParameter("p_MyIDList", OracleDbType.Varchar2)
{
CollectionType = OracleCollectionType.PLSQLAssociativeArray,
Value = my_list_with_ids.ToArray()
}

);

da = new OracleDataAdapter(cmd);

da.Fill(myDataSet);

It's not working!

I can't find neither

cmd.BindByName = true;

nor

OracleCollectionType.PLSQLAssociativeArray

The constraint of the solution is that you have to use Oracle .NET driver (Oracle.DataAccess) instead of the the Microsoft (System.Data.OracleClient) driver. But with .Net 4 the Microsoft's Oracle driver is marked deprecated anyway. So get used to it.

This is it. The only way to pass an array to a SQL.

"Holy shivers!" you think. This is a lot of glue for a simple task like this!

Basically yes, BUT
You can do 3 things now:
1.) I use a macro that converts my SQL into PL/SQL by automatically replacing the binding variable :MyIDList with the PL/SQL Parameter p_myIDList.
2.) You can tune your performance significantly by rewriting your SQL
3.) You can clean up your code a lot by using default values

Improve overall performance

Our former SQL

select * from table where table.id in (select id from table(iMyIDList))

becomes unbearable slow with a large number of ID's and lines in table. What you can do now is to rewrite our SQL to

select * from table where table.id
join (select id from table(iMyIDList)) IdFilter on table.id = IdFilter.id

And if you want to develop in SQL and simply convert it with our macro you can add the following function to your package:

FUNCTION GetDefaultTable
(
param varchar2
)
RETURN IDTableType
is
begin
return IDTableType(IDType(param));
end;

and rewrite your regular SQL to:

select * from table where table.id
join (select id from table(MyPackage.GetDefaultTable(:MyIDList)) IdFilter
on table.id = IdFilter.id

Use PL/SQL defaults:

A feature of our PL/SQL is that you can define default values for all parameters.
In a simple case this is:

procedure GetSomeThing
(
p_param1 in varchar2 default 'SomeDefaultValue',
);

but what do we do with our associative array?

The fancy part about default parameters is that the value can be a call to function.....

So

procedure GetSomeThing
(
p_MyIDList IN stringTableType default GetDefaultTable('DefaultValueForElement'),
p_param1 in varchar2 default 'SomeDefaultValue',
p_outRefCursor out RefCursorType
);

works nice and easy.

in combination with the line in C#

cmd.BindByName = true;

what you can do now is only pass parameters that differ from their defaults what can be used to write a much nicer code. Instead of passing all the parameters defined a for each procedure defined (results in a clunky piece of code), you just just set the parameter for any stored procedure if the associated value is non-default.

139 comments:

moodboom said...

Well done, I came to the same conclusions. Why is this so hard, and not documented well anywhere? You'd think Oracle and Microsoft would be able to work out a better solution. Oh well, thanks for breaking down the working solution so well!

Michael said...

Thanks for the post, proved very useful, however for anyone else reading be aware of a couple of things
1) You need to add the following to the package spec
TYPE RefCursorType IS REF CURSOR;
If you don't you'll get an error from Oracle while compiling the package.
2) In the package body, before you call Extend, add the following
iMyIDList := IDTableType();
If you don't you'll get an ORA-06531 when you try to execute the function.

elLoco said...

Thanks! Just updated the article

Anonymous said...

How many elements is considered large for the Table(delimited) usage that it starts to slow down the performance? Over 100? 1,000? 10,000?

elLoco said...

I guess you refer to

"select * from table where table.id in (select id from table(iMyIDList))"

100 are ok
1000 can be acceptable
10000 sucks

performance degrades exponentially

George Joseph said...

There is an alternative to binding the "IN" clause. However it doesn't use bind variables, which in my opinion is a really bad idea especially in concurrent situations.

How it works is that the in clause be stored as string variable with comma seperated values. Take special note of the leading and trailing comma here
var_in_string=',1,2,3,4,'

Then construct the query block in this manner.

SELECT * FROM TABLE WHERE var_in_string LIKE '%,'||ID||',%'

This basically does a pattern matching between the passed in variable and the column value of id in the database table after concatenating a comma

so if the table has values of id
(1,9,0,10)

the comparison would be(i am showing one row at a time)
',1,2,3,4,' like '%,1,%' which will return true

JazzHarmonicat said...

I'm just now coming back to Oracle after working with MS SQL Server for a couple of years. I don't know if Oracle can do this, but in SQL Server, one way is to:
1. In C#, format the array or list as an XML "table".
2. Pass the entire XML string as VARCHAR2 to the stored proc.
3. Inside the stored proc, parse the XML into a local table variable (or a TEMP table could be used, which if shared could have a GUID callerid field to differentiate).
4. Format the SQL as
WHERE a. IN (SELECT * FROM )

Might run faster if using a global temp table.

JazzHarmonicat said...

Also in SQL Server, there is a Split( ) function that can be used to load a temp table or local table variable from a comma-delimited string (which works only if no commas in the values included in the list). Not sure if anything like this exists in Oracle, but a Split( ) function could easily be written.

Anonymous said...

This is easy in Sql. Place your array in a datatable. Go to sql and create a user defined data table type. Now pass your data table to the stored procedure and you can select from it as you would a normal table. Why on earth does oracle not have this functionality yet?????

Anonymous said...

I am new to all this and I am having trouble implementing this code example. I don't know what to put in the line:

da.Fill(myDataSet);


What is myDataSet?

I can get into the database and call my procedure which needs 4 inputs, but it does not get called with any parameters.

Unknown said...

That all works fine when the array has items, but I get
System.InvalidOperationException: OracleParameter.Value is invalid
when the array is empty. And empty array is valid input for my procedure. Do you know some way to handle this?

Unknown said...

@Martin,
In your case you are either expecting everything back from from the call or no data returned back from the call. In either case your solution is fairly straight forward if handled on the .Net side.

In the first case, call a different procedure in Oracle that does NOT require the variable (e.g. get_all_**** instead of get_****).

In the second case don't call Oracle at all, just return an empty initialized set.

Kamran said...

What if I want to pass array of files (byte[]) to stored procedure?

Please see my post and please tell me if there exists any solution for doing it.

http://stackoverflow.com/questions/24360736/inserting-multiple-files-in-pl-sql-by-calling-stored-procedure-from-c-sharp

Anonymous said...

It'd help to mention that PL/SQL objects/types cannot be used in select statements since select statement only allow SQL objects/types.

ryia said...

It is a new tip to the conversion This blog is really helpful and useful..Oracle Training in Chennai

Md. Badsha Alamgir said...

really very helpful bolog. but the cursor type should be declare into package

Rosalio said...

Excellent Post!
I spend two day looking for some help like this.

You make my week!!

Thank you for your post

Unknown said...


Pretty article! I found some useful information in your blog, it was awesome to read, thanks for sharing this great content to my vision, keep sharing..
Android App Development Company

Unknown said...


A very interesting case study


Sap MM Training In Chennai | Mainframe Training In Chennai | Hadoop Training In Chennai

Unknown said...

Yes it is useful to know about the arrays to the required to Oracle. Also learn about the latest technologies such as Cloud Computing, With some quick links below,

best aws certification training in Chennai | best aws certification training in India | best aws certification training in Velachery | best aws certification training in OMR

Revathy A said...

The post is written in very a good manner and it entails many useful information for me. I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept.
angularjs Training in marathahalli

angularjs interview questions and answers

angularjs Training in bangalore

angularjs Training in bangalore

angularjs Training in chennai

automation anywhere online Training

afiah b said...

Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
Java interview questions and answers

Java training in Chennai | Java training institute in Chennai | Java course in Chennai

Java training in Bangalore | Java training institute in Bangalore | Java course in Bangalore

Java interview questions and answers

gowsalya said...

Thank you for this post. Thats all I are able to say. You most absolutely have built this blog website into something speciel. You clearly know what you are working on, youve insured so many corners.thanks
python training Course in chennai
python training in Bangalore
Python training institute in bangalore

mathimathi said...

Wow, what great information. I am sure the info on your blog will help others, as I am trying to do as well.
Oracle apps training |
Oracle Training in Chennai |
Oracle dba training in chennai

mathimathi said...

This is such a neat idea!
Software Testing Training |
Software Training |
Software Testing Training in Chennai



kevin antony said...

This is most informative and also this post most user friendly and super navigation to all posts... Thank you so much for giving this information to me.

rpa training in chennai
rpa training in bangalore
rpa course in bangalore
best rpa training in bangalore
rpa online training

gowsalya said...

Nice tutorial. Thanks for sharing the valuable information. it’s really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials…
Best Devops Training in pune
excel advanced excel training in bangalore
Devops Training in Chennai

Unknown said...

Your story is truly inspirational and I have learned a lot from your blog. Much appreciated.

python training in chennai
python training in chennai
python training in bangalore

sakthi said...

Inspiring writings and I greatly admired what you have to say , I hope you continue to provide new ideas for us all and greetings success always for you..Keep update more information.

rpa training in chennai
rpa training in bangalore
rpa course in bangalore
best rpa training in bangalore
rpa online training

shalinipriya said...

Your good knowledge and kindness in playing with all the pieces were very useful. I don’t know what I would have done if I had not encountered such a step like this.
Data Science Training in Chennai | Best Data science Training in Chennai
Data Science training in anna nagar | Data science training in Chennai
Data Science training in chennai | Best Data Science training in chennai
Data science training in Bangalore | Data Science training institute in Bangalore
Data Science training in marathahalli | Data Science training in Bangalore
Data Science interview questions and answers


<a href="http://ww

Unknown said...

your topic is inspirational that's the useful one.

nebosh course in chennai
safety course in chennai

Chiến SEOCAM said...

ok ok ok ok

Phối chó bull pháp

Phối giống chó Corgi

Phối chó Pug

Phối giống cho Pug

Chiến SEOCAM said...

Chúc bạn một ngày tốt lành. Cảm ơn bạn đã chia sẻ bài viết thú vị như thế!

lều xông hơi mini

mua lều xông hơi ở đâu

lều xông hơi gia đình

bán lều xông hơi

xông hơi hồng ngoại

Chiến SEOCAM said...

May mắn và hạnh phúc luôn đồng hành bên bạn! Cảm ơn vì bài viết

GIẢO CỔ LAM GIẢM BÉO

MUA GIẢO CỔ LAM GIẢM BÉO TỐT Ở ĐÂU?

NHỮNG ĐIỀU CHƯA BIẾT VỀ GIẢO CỔ LAM 9 LÁ

Giảo Cổ Lam 5 lá khô hút chân không (500gr)

Chiến SEOCAM said...

May mắn và hạnh phúc luôn đồng hành bên bạn! Cảm ơn vì bài viết

Trị dứt điểm bệnh viêm xoang bằng máy xông hương tinh dầu cao cấp

Công ty phân phối máy khuếch tán tinh dầu Hà Nội uy tín chất lượng

Máy khuếch tán tinh dầu Chery A07 cải tạo không khí thân thiện môi trường

Công dụng của máy khuếch tán tinh dầu- bạn có thể tham khảo

Chiến SEOCAM said...

చాలా ప్రత్యేకమైన వ్యాసం. భాగస్వామ్యం చేసినందుకు ధన్యవాదాలు

Dịch vụ phối giống chó Alaska tại Hà Nội

Dịch vụ phối giống chó Pug tại Hà Nội

Chuyên dịch vụ phối giống chó Corgi tại Hà Nội

Quy trình phối giống chó Bull Pháp

Chiến SEOCAM said...

Bài viết rất thú vị

Công dụng của giảo cổ lam 5 lá

Giá bán hạt methi bao nhiêu tiền?

Hạt methi mua ở đâu Thanh Xuân tốt?

Dùng hạt methi trị tiểu đường tuyp 2

Công dụng giảm béo của giảo cổ lam

Maketting SEO said...

Es fácil ganarse una confianza que( tam san be tong sieu nhe ) es fácil de destruir, es ( Sàn panel Đức Lâm ) importante no engañar a los grandes( tấm bê tông siêu nhẹ ) o pequeños, pero el engaño ha sido el problema

wemake said...

<a href="https://vidmate.vin/

techsupport said...

get free apps on 9apps

Training for IT and Software Courses said...

Your articles really impressed for me,because of all information so nice.robotic process automation (rpa) training in bangalore

Training for IT and Software Courses said...

Being new to the blogging world I feel like there is still so much to learn. Your tips helped to clarify a few things for me as well as giving.uipath training in bangalore

Realtime Experts said...

It’s really Nice and Meaningful. It’s really cool Blog. You have really helped lots of people who visit Blog and provide them Useful Information. Thanks for Sharing.dot net training in bangalore

Bangalore Training Academy said...

Really very happy to say, your post is very interesting to read. I never stop myself to say something about it.You’re doing a great job. Keep it up...

Become an Expert In DBA Training in Bangalore! The most trusted and trending Programming Language. Learn from experienced Trainers and get the knowledge to crack a coding interview, @Bangalore Training Academy Located in BTM Layout.

Real Time Experts said...

Very interesting, good job and thanks for sharing such a good blog.

Real Time Experts Training Center is one of the Best SAP PP Training Institutes in Bangalore with 100% placement support. SAP Production Planning training in Bangalore provided by sap pp certified experts and real-time working professionals with handful years of experience in real time sap pp projects.

eTechno Soft Solutions said...

Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective...

Looking for Salesforce CRM Training in Bangalore, learn from eTechno Soft Solutions Salesforce CRM Training on online training and classroom training. Join today!

Softgen Infotech said...

Really i appreciate the effort you made to share the knowledge. The topic here i found was really effective...

Learn SAP Training from the Industry Experts we bridge the gap between the need of the industry. Softgen Infotech provide the Best SAP Training with 100% Placement Assistance. Book a Free Demo Today.

eTechno Soft Solutions said...

Post is very useful. Thank you, this useful information.

Get SAP ABAP Training in Bangalore from Real Time Industry Experts with 100% Placement Assistance in MNC Companies. Book your Free Demo with eTechno Soft Solutions.

Training for IT and Software Courses said...

This is the exact information I am been searching for, Thanks for sharing the required infos with the clear update and required points. To appreciate this I like to share some useful information.

mulesoft training in bangalore

mulesoft courses in bangalore

mulesoft classes in bangalore

mulesoft training institute in bangalore

mulesoft course syllabus

best mulesoft training

mulesoft training centers

Realtime Experts said...

Thank you for your post. This is excellent information. It is amazing and wonderful to visit your site.

sap mm training in bangalore

sap mm courses in bangalore

sap mm classes in bangalore

sap mm training institute in bangalore

sap mm course syllabus

best sap mm training

sap mm training centers

python training in vijayawada said...

We as a team of real-time industrial experience with a lot of knowledge in developing applications in python programming (7+ years) will ensure that we will deliver our best in python training in vijayawada. , and we believe that no one matches us in this context.

Unknown said...

Thanks loads for writting this kind of fantastic article.
It's simply has plenty of insights and valueable informtion.

click here formore info.

Durai Moorthy said...

Very nice post. thanks for sharing with us.

aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore
python Training in Bangalore
aws Training in Bangalore

hami said...

Very correct statistics furnished, Thanks a lot for sharing such beneficial data.
katmovies

GlobalEmployees said...

Read my post here
Java programmer
Java programmer
Java programmer

Durai Moorthy said...

I am really happy with your blog because your article is very unique and powerful for new reader.
aws Training in Bangalore
python Training in Bangalore
hadoop Training in Bangalore
angular js Training in Bangalore
bigdata analytics Training in Bangalore
python Training in Bangalore
aws Training in Bangalore

Bồn ngâm massage chân Doca said...

Bài viết quá

case máy tính cũ

vga cũ hà nội

mua bán máy tính cũ hà nội

Lắp đặt phòng net trọn gói

Tutoring Centre said...

Thank you for your post. This is excellent information.

Scholarship Preparation Classes

Shruti said...

An impressive share! I've just forwarded this onto a coworker who has been doing a little homework on this. And he actually ordered me lunch because I found it for him... lol. So allow me to reword this.... Thanks for the meal!! But yeah, thanks for spending time to discuss this issue here on your web page.


Selenium Courses in Marathahalli

selenium institutes in Marathahalli

selenium training in Bangalore

Selenium Courses in Bangalore

best selenium training institute in Bangalore

selenium training institute in Bangalore

Shivani said...

I needed to thank you for this excellent read!! I certainly loved every little bit of it. I have got you book-marked to look at new things you post…

Best Advanced Java Training In Bangalore Marathahalli

Advanced Java Courses In Bangalore Marathahalli

Advanced Java Training in Bangalore Marathahalli

Advanced Java Training Center In Bangalore

Advanced Java Institute In Marathahalli

gadgetsdora said...

Great post! We will be linking to this get great article on our website. Keep up the great writing.

Bồn ngâm massage chân Doca said...

ok hi

https://forums.pokemmo.eu/index.php?/profile/131787-cualuoihm/
https://doremir.com/forums/profile/cualuoihm
https://www.wincert.net/forum/profile/100889-cualuoihm/
https://www.goodreads.com/user/show/104133368-cualuoihm

Máy mátxa chân said...

haizzz

Bồn ngâm chân

máy ngâm chân

bồn massage chân

may mat xa chan

info said...

A fascinating discussion is definitely worth comment. I do think that you need to write more on this subject matter, it might not be a taboo subject but generally people do not speak about these issues. latest To the next! Kind regards!!

Tracking2u said...

Thanks for sharing GPS Vehicle tracking system

SD electronic said...

amazing blog!!!!

Thanks

washing machine service centre in Coimbatore

sachin nagar said...

Hi, This is your awesome article , I appreciate your effort, thanks for sharing us.
cism training
cism certification

cisa training,
cisa certification
cisa exam

sachin nagar said...

Hi, This is your awesome article , I appreciate your effort, thanks for sharing us.
cism training
cism certification

cisa training,
cisa certification
cisa exam

munroe island said...

Nice post.

kerala honeymoon resorts

Graysonau said...

great post. thanks for sharing.

Roller blinds

monkeypen said...

Super post.keep it up.

personalised childrens story books

nizam said...

one of the good informative one


BEST ANGULAR JS TRAINING IN CHENNAI WITH PLACEMENT

https://www.acte.in/angular-js-training-in-chennai
https://www.acte.in/angular-js-training-in-annanagar
https://www.acte.in/angular-js-training-in-omr
https://www.acte.in/angular-js-training-in-porur
https://www.acte.in/angular-js-training-in-tambaram
https://www.acte.in/angular-js-training-in-velachery

latchu kannan said...

Great article! with an nice content. keep doing on more.

AngularJS training in chennai | AngularJS training in anna nagar | AngularJS training in omr | AngularJS training in porur | AngularJS training in tambaram | AngularJS training in velachery



harshni said...

Hi, Great.. Tutorial is just awesome..It is really helpful for a newbie like me.. I am a regular follower of your blog. Really very informative post you shared here. Kindly keep blogging.
Artificial Intelligence Training in Chennai | Certification | ai training in chennai | Artificial Intelligence Course in Bangalore | Certification | ai training in bangalore | Artificial Intelligence Training in Hyderabad | Certification | ai training in hyderabad | Artificial Intelligence Online Training Course | Certification | ai Online Training | Blue Prism Training in Chennai | Certification | Blue Prism Online Training Course

Cass Tuft said...

Forex Signals, MT4 and MT5 Indicators, Strategies, Expert Advisors, Forex News, Technical Analysis and Trade Updates in the FOREX IN WORLD

Forex Signals Forex Strategies Forex Indicators Forex News Forex World

ganesh said...

I just loved your article on the beginners guide to starting a blog.If somebody take this blog article seriously in their life, he/she can earn his living by doing blogging.thank you for thizs article.
https://www.learnovita.com/angular-js-training-in-chennai
https://www.learnovita.com/angular-js-training-in-velachery
https://www.learnovita.com/angular-js-training-in-tambaram
https://www.learnovita.com/angular-js-training-in-porur
https://www.learnovita.com/angular-js-training-in-omr
https://www.learnovita.com/angular-js-training-in-annanagar


ganesh said...

Nice tutorial. Thanks for sharing the valuable information. it's really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials

Angular js Training in Chennai

Angular js Training in Velachery

Angular js Training in Tambaram

Angular js Training in Porur

Angular js Training in Omr
Angular js Training in Annanagar

ganesh said...

Nice tutorial. Thanks for sharing the valuable information. it's really helpful. Who want to learn this blog most helpful. Keep sharing on updated tutorials

Angular js Training in Chennai

Angular js Training in Velachery

Angular js Training in Tambaram

Angular js Training in Porur

Angular js Training in Omr
Angular js Training in Annanagar

ganesh said...

Nice blog. Thanks for sharing such great information. Thanks a lot for writting such a great article. It's really has lots of insights and valuable information.
Angular js Training in Chennai

Angular js Training in Velachery

Angular js Training in Tambaram

Angular js Training in Porur

Angular js Training in Omr
Angular js Training in Annanagar

harini said...

Insightful blog! appreciate the way it is written. Thanks for your thoughts and time in articulating in a well structured manner. Really easy to understand and it is very helpful
Selenium Training in Chennai

Selenium Training in Velachery

Selenium Training in Tambaram

Selenium Training in Porur

Selenium Training in Omr

Selenium Training in Annanagar

sahasrit said...

Insightful blog! appreciate the way it is written. Thanks for your thoughts and time in articulating in a well structured manner.
amazon web services aws training in chennai

microsoft azure course in chennai

workday course in chennai

android course in chennai

ios course in chennai

Pushba said...

Wow, what great information. I am sure the info on your blog will help others, as I am trying to do as well.
IELTS Coaching in chennai

German Classes in Chennai

GRE Coaching Classes in Chennai

TOEFL Coaching in Chennai

Spoken english classes in chennai | Communication training

Miles Hrein said...

I see you know very much about oracle, if you want to create youtube channel about it, you can use this site https://soclikes.com/ to get your first youtube subscribers

Quickbooks Expert said...

Nice & Informative Blog !
you may encounter various issues in QuickBooks that can create an unwanted interruption in your work. To alter such problems, call us at QuickBooks Customer Support Number 1-855-974-6537 and get immediate technical services for QuickBooks in less time.

Quickbooks Expert said...

Nice Blog !
users can easily maintain all the business accounting processes through a single software. To get support for payroll update, installation, and download error, call us at Quickbooks Customer Support Number 1-877-751-0742 and get instant technical solutions to curb QuickBooks problems.

DigitalMarketer said...

Hey! Good blog. I was facing an error in my QuickBooks software, so I called QuickBooks Error 6123 (855)756-1077. I was tended to by an experienced and friendly technician who helped me to get rid of that annoying issue in the least possible time.

AnnaSereno said...

Hey! Mind-blowing blog. Keep writing such beautiful blogs. In case you are struggling with issues on QuickBooks software, dial QuickBooks Support Number (877)603-0806. The team, on the other end, will assist you with the best technical services.

Quickbooks Expert said...

Nice & Informative Blog !
you may encounter various issues in QuickBooks that can create an unwanted interruption in your work. To alter such problems, call us at QuickBooks Customer Service Number 1-877-948-5867 and get immediate technical services for QuickBooks in less time.

Quikads BD said...

Thank you for your suggestion. I was searching like this about two days.
To buy a second hand mobile is not easy when you have no idea about 2nd hand phone price in bd. So you can search in Quikads; a classified ads platform in Bangladesh. Where you will get so many ideas about second hand mobile phone prices in Bangladesh.

Anonymous said...

I’m usually to blogging and i really enjoy your content.The article has truly talks my interest. I’m going to save your web site and also keep checking for new information.
Bigasoft Total Video Converter Crack

QuickBooks xpert said...

Our experts at QuickBooks Customer Service are available to help you fix all your QuickBooks issues in this global situation.

99 Digital Academy said...

Really Amazing Article, I have seen here. This is in related to your article that the Best Digital Marketing Course offered by 99 Digital Academy. The course is designed for students, professionals and for business owners. This course is in trend. Click on link to see more.

QuickBooks xpert said...

Nice Blog !
One such annoying error is QuickBooks Error 15241. If you need immediate help with this particular issue, call us and get feasible solutions for QuickBooks problems.

Persephone Summers said...

buy juicy fruit online
buy gelato strain online
Buy dark star strain online
buy hawaiian skunk strain online
buy bc big bud strain leafly
buy auto flowering seeds online
buy brass knuckles vape recall 2018
buy alaskan thunder fuck online
buy cannabis seeds bank online

Cracked Apps said...
This comment has been removed by the author.
Alexis Gipson said...


Thanks for the interesting content. I like your post and your blog is amazing.
If you are interested in Video Downloader apps you can check my blog site. It is new and really informative.

utorrent pro mod apk free download

Getdigitalera said...

Master Wang earned fame and recognition from the streets where he was offering his soulmate drawing services. Master Wang drawings service’s popularity and remarkable effectiveness led to high demand by people from all parts of the world. His psychic and astrology abilities are exceptional, and he has successfully guided millions of people towards their soulmates. He has now created his website to ensure everyone in the world can benefit from his soulmate drawings. Master Wang’s new soulmate drawing services represent the best and most unique solution to finding your precious soulmate. He leverages his years of experience in astrology and being a psychic to create compelling visuals that often come true. With a few simple questions, he will see and draw your soulmate and help you on your personal love journey.

Anonymous said...

The 1tac TC1200 utilizes Cree XML2 LED innovation and has a yield of 1200 Lumens. The life expectancy of the electric lamp is around 100,000 hours of light. The TC1200 additionally has a carefully directed net to guarantee that the splendor is kept up for the duration of the existence of the morning. You may have used the flashlight before, but 1tac TC1200 tactical flashlight is different from others. These are flashlights intended to pull twofold obligation. In addition to the fact that they function as electric lamps to help you find uncertainty, they also fill in as weapons.

Getdigitalera said...

Master Wang earned fame and recognition from the streets where he was offering his soulmate drawing services. Check now Master Wang drawings reviews for more information. Its service’s popularity and remarkable effectiveness led to high demand by people from all parts of the world. His psychic and astrology abilities are exceptional, and he has successfully guided millions of people towards their soulmates. He has now created his website to ensure everyone in the world can benefit from his soulmate drawings. Master Wang’s new soulmate drawing services represent the best and most unique solution to finding your precious soulmate. He leverages his years of experience in astrology and being a psychic to create compelling visuals that often come true. With a few simple questions, he will see and draw your soulmate and help you on your personal love journey.

amazonherbal said...

Nice post.
Best Online Herbal Shop

3RI Technologies said...

Thanks for the content with useful code shared. Keep sharing

Data Science Training in Pune

AnnaSereno said...

Hey! What a wonderful blog. I loved your blog. QuickBooks is the best accounting software, however, it has lots of bugs like QuickBooks Error. To fix such issues, you can contact experts via QuickBooks Customer Service

hussain d said...

I like it when people come together and share ideas. Great site, keep it up!
Hadoop Training in Bangalore
Python Training in Bangalore
AWS Training in Bangalore
UI Development training in Bangalore
Machine Learning Training in Bangalore
Machine Learning Training with Python in Bangalore
Data Science Using Python Training in Bangalore

Rachel Ross said...

Hey! Nice Blog, I have been using QuickBooks for a long time. One day, I encountered QuickBooks Customer Service in my software, then I called QuickBooks Customer Service. They resolved my error in the least possible time.

Simmyjessure said...

i m very happy after read your Article .if you have +18555525662 facing some unexpected issue .to fix such type issue call at quickbooks customer service

daisydavis said...

QuickBooks software for managing business various accounting process if you have facing some unwanted errors then to fix such problems at

quickbooks customer service

Cashjosh said...

We should look at How To Earn Money By Becoming An Ajio Affiliate Program? We as a whole realize that Ajio is a famous shopping site that gives a phenomenal method to clients to acquire from offshoot promoting. Ajio is the shopping site where you can without much of a stretch buy your necessary items, including garments, shoes, and different bits of stuff, at a truly sensible cost. There is no secret truth that the Ajio application is the site where clients or purchasers can benefit from the item at a moderate cost.
In case you are considering how you can bring in money from this shopping site, you have arrived at the correct spot. Presently you don't have to turn down great many website pages to look for or access quality data with respect to this field. Member promoting programs guarantee to give perhaps the best interaction to the clients to make money drastically. Ajio shopping site likewise carries select worldwide brands to their crowd and, more often than not guarantees to give extraordinary limits. Limits of at least 50% are accessible on their shopping site. On the off chance that we talk about assistance support, the Ajio stage just takes 2 to 9 days to convey the particular items to the shopper.

Lauren Kathy said...


Hey! Lovely blog. Your blog contains all the details and information related to the topic. In case you are a QuickBooks user, here is good news for you. You may encounter any error like QuickBooks Error, visit at QuickBooks Customer Service Number for quick help.

Best Online course said...

Nice blog

Visit - Elewayte - Best Online Course
to get trained in one of the best online training institutions with internships and placement assistance.

Rachel Ross said...

Hey! Lovely blog. Your blog contains all the details and information related to the topic. In case you are a QuickBooks user, here is good news for you. You may encounter any error like QuickBooks Error, visit at QuickBooks Customer Service (855)741-3663 for quick help.

Peter Johnson said...

Thank you for sharing such a really admire post. Your post is great!..Agro Fertilizer Company in India

Maria Hernandez said...

Hey! Mind-blowing blog. Keep writing such beautiful blogs. In case you are struggling with issues on QuickBooks for MAC Support , dial QuickBooks Support Phone Number (602)325-1557. The team, on the other end, will assist you with the best technical services.

QuickBooks Customer Service said...

nice blog.We provide best quickbooks customer service you can reach us at.+1 888-210-4052

Quickbooks Customer Service said...

nice blog.this is too god in quickbook customer service you can contact quickbook customer services team at.+1 346-414-8256

Quickbooks support Service said...

Nice & Informative Blog !
In case you face any technical issue in QuickBooks, call us at QuickBooks Customer Service Phone Number +1 346-414-8256and get feasible solutions for QuickBooks problems.

QuickBooks Support service said...

we are proving the best Quickbook support services interested one can contact us easily and get the entire details regarding the same.+18666695068

Quickbooks Customer Service said...

Good Blog!! If you are searching for QUICKBOOKS SUPPORT SERVICE SUPPORT. you can reach us at.+13464148256

quickbooks support service said...

nice blog. if you are looking forQuickbooks support service.you can contact us at.+18776030806

QuickBooks Customer Service said...

Good content!!
if you want to a best service so go to Quickbook support serviceyou can contact us at.+1 888-210-4052

Jai Jaiswal said...

Good blog. Here is mastery about yoga yoga , yogainfo , meditational basics , yoga benefits , types of yoga , - theyogainfo.com you reach us at

Jai Jaiswal said...


Awesome bolg. Keep calm your Mind anwith peaceful Yoga and regulate it with peaceful yoga Suryanamaskar. meditation basics yoga , yoga benefits , types of yoga , yoga history , health benefit yoga , yoga pose , yoga asanas - theyogainfo.com you reach us at

Jai Jaiswal said...

It`s a very good blog. Start your day from Suryanamaskar to make day Energetic. meditation basics yoga , yogainfo, theyogainfo.com you reach us at


David said...

I find it useful is the ability to call Quickbooks phone numbers for help. This can be done by dialing Quickbooks Support Phone Number +1 8555644161. When you do, you will reach the customer service team, who will be able to provide assistance with any question or issue that you may have.

Yasodha Varman said...
This comment has been removed by the author.
Quickbooks Support Phone Number.+1 888-210-4052,PA. said...

Here is an amazing QuickBooks phone number: Quickbooks Customer Service +1 888-210-4052. This will help you in any query related to the software.

Quickbooks Support Phone Number.+1 888-210-4052,PA. said...

QuickBooks also offers live chat support as well as email support which allows businesses who are out of the office or at home to access QuickB's qualified help desk staff. The QuickBooks Service Number is +1 888-210-4052 and is always available 24 hours a day to serve you with all your QuickBooks questions.

themelbwinestore said...

Nice post.Thanks for sharing.
wine delivery Melbourne

Inventateq said...

Very informative Blog by you for the people who are new to this industry. Your detailed blog solves all the queries with good explanation. Keep up the good work. Thanks for sharing! Please check out our courses of hadoop by inventateq.

web development course in bangalore

website developer training in bangalore

Harshita Creation said...

Very informative Blog by you for the people who are new to this industry. Your detailed blog solves all the queries with good explanation. Keep up the good work. Thanks for sharing! We have a website too. Feel free to visit anytime.

buy western dresses online

western wear women

Krishna Packer Movers said...

Very informative Blog by you for the people who are new to this industry. Your detailed blog solves all the queries with good explanation. Keep up the good work. Thanks for sharing! We have a website too. Feel free to visit anytime.

packers and movers in Bandra

packers and movers in Airoli

Invite Mart said...

I am exteremly impressed by your blog, because its very powerful for the new readers and have lot of information with proper explanation. Keep up the good work. Thanks for sharing this wonderful blog! We also have a website. Please check out whenever and wherever you see this comment.

marriage invitation card

Online Wedding Card Maker

Aadesh Cab Service said...

Thank you so much for sharing this very Useful And More Informative post. Your blog has a lot of material with clear explanations and is really effective for new readers, therefore I'm very impressed. Keep up the excellent work. Thank you for distributing this fantastic blog! Moreover, we have a website. When and whenever you see this comment, please check it out.
taxi service in Ahmedabad
cab service in Ahmedabad
taxi on rent in Ahmedabad

Pacewalk said...

Your blog has a lot of material with clear explanations and is really effective for new readers, therefore I'm very impressed. Keep up the excellent work. Thank you for distributing this fantastic blog! Moreover, we have a website. When and whenever you see this comment, please check it out.

digital marketing company in mohali

SEO Company in Mohali

Quick Convert said...

Your blog has a lot of material with clear explanations and is really effective for new readers, therefore I'm very impressed. Keep up the excellent work. Thank you for distributing this fantastic blog! Moreover, we have a website. When and whenever you see this comment, please check it out.

MP3 File Converter

Quick Convert

Build_a_Sucess said...

" This blog is given us the power to choose wisely. Your willingness to share your knowlwdge with other is admirable." DevOps Course

Build_a_Sucess said...

" Your blog post gave a clear and understanding subject." MSBI Training

Build_a_Sucess said...

This blog is given us the power to choose wisely. i appreciate your contributions. MSBI Certification

Build_a_Sucess said...

This blog is very helpful and easy to understand. MSBI Course

Anonymous said...

Hi, times confuse with an array, and these functions just give some clearance about the array.

uk persons can visit for related jobs of construction company worksheriff