MidLifeXis was so kind as to recommend my module DBIx::PreQL. It's aim is to simplify the horrendous task of maintaining dynamically generated SQL.
Here's one way to handle the your particular case.
my $preql = <<'PREQL'
* SELECT
* Name
* FROM
CUST Customer
SALE Sales
* WHERE
CUST CustID = ?customer_id?
SALES SalesID = ?sales_id?
PREQL
my ($query, @params) = DBIx::PreQL->build_query(
query => $preql,
data => {
sales_id => $salesid,
customer_id => $custid,
},
wanted => $x > 10 ? 'CUST' : 'SALES'
);
my $got = $db->selectall_hashref( $query, @params );
Why do all this stuff?
- You get the placeholders you wanted for your dynamic query.
- This is the least sucky way I've found to build dynamic SQL. The code I maintain has tons of dynamic SQL and I spent years experimenting before I hit upon this approach.
- You will get a good error message if you put yourself in a condition where you are expecting a customer id but one isn't available.
In fact, at $WORK, we have found it worthwhile to convert static queries to PreQL. It has helped with debugging and maintenance. Because all the placeholders are labeled, they are easier to understand. PreQL also provides useful error messages that identify missing, but expected placeholder values.
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.
|