pdf viewer dll for c# : How to add image to pdf in preview SDK software API .net winforms asp.net sharepoint postgresql-9.4-A4115-part2741

Chapter 40. PL/pgSQL - SQL Procedural Language
DECLARE
curtime timestamp := now();
BEGIN
UPDATE users SET last_modified = fn.curtime, comment = stamp_user.comment
WHERE users.id = stamp_user.id;
END;
$$ LANGUAGE plpgsql;
Variable substitution does not happen in the command string given to
EXECUTE
or one of its variants.
If you need to insert a varying value into such a command, do so as part of constructing the string
value, or use
USING
,as illustrated in Section 40.5.4.
Variable substitution currently works only in
SELECT
,
INSERT
,
UPDATE
,and
DELETE
commands,
becausethe mainSQL engine allows query parameters onlyinthese commands. To use anon-constant
name or value in other statement types (generically called utility statements), you must construct the
utilitystatement as a string and
EXECUTE
it.
40.10.2. Plan Caching
The PL/pgSQL interpreter parses the function’s source textand producesaninternal binaryinstruction
tree the first time the function is called (within each session). The instruction tree fully translates
the PL/pgSQL statement structure, but individual SQL expressions and SQL commands used in the
function are not translated immediately.
As each expression and SQL command is first executed in the function, the PL/pgSQL interpreter
parses and analyzes the command to create a prepared statement, using the SPI manager’s
SPI_prepare
function. Subsequent visits to that expression or command reuse the prepared
statement. Thus, a function with conditional code paths that are seldom visited will never incur
the overhead of analyzing those commands that are never executed within the current session. A
disadvantage is that errors in a specific expression or command cannot be detected until that part of
the function is reached in execution. (Trivial syntax errors will be detected during the initial parsing
pass, but anything deeper will not be detected until execution.)
PL/pgSQL (or more precisely, the SPI manager) can furthermore attempt tocache the execution plan
associated with any particular prepared statement. If a cached plan is not used, then a fresh execution
plan is generated on each visit to the statement, and the current parameter values (that is, PL/pgSQL
variable values) can be used to optimize the selected plan. If the statement has no parameters, or is
executed many times, the SPI manager will consider creating a generic plan that is not dependent on
specific parameter values, andcaching that for re-use. Typically this will happen onlyif the execution
plan is not very sensitive to the values of the PL/pgSQL variables referenced in it. If it is, generating
aplan each time is a net win. See PREPARE for more information about the behavior of prepared
statements.
Because PL/pgSQL saves prepared statements andsometimes execution plans in this way, SQL com-
mands that appear directly in a PL/pgSQL function must refer to the same tables and columns on
every execution; that is, you cannot use a parameter as the name of a table or column in an SQL
command. To get around this restriction, you can construct dynamic commands using the PL/pgSQL
EXECUTE
statement— at the price of performingnew parse analysis andconstructing anew execution
plan on everyexecution.
The mutable nature of record variables presents another problem in this connection. When fields of
arecord variable are used in expressions or statements, the data types of the fields must not change
from one call of the function to the next, since each expression will be analyzed using the data type
1078
How to add image to pdf in preview - insert images into PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Sample C# code to add image, picture, logo or digital photo into PDF document page using PDF page editor control
add image in pdf using java; add image to pdf acrobat reader
How to add image to pdf in preview - VB.NET PDF insert image library: insert images into PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Guide VB.NET Programmers How to Add Images in PDF Document
add picture to pdf file; add image to pdf acrobat
Chapter 40. PL/pgSQL - SQL Procedural Language
that is present when the expression is first reached.
EXECUTE
can be used to get around this problem
whennecessary.
If the same function is used as a trigger for more than one table, PL/pgSQL prepares and caches
statements independently for each such table — that is, there is a cache for each trigger function and
table combination, not just for each function. This alleviates some of the problems with varying data
types; for instance, a trigger function will be able to work successfully with a column named
key
even if it happens to have different types in different tables.
Likewise, functions having polymorphic argument types have a separate statement cache for each
combination of actual argument types they have been invoked for, so that data type differences do not
cause unexpected failures.
Statement caching can sometimes have surprising effects on the interpretation of time-sensitive val-
ues. For example there is a difference between what these two functions do:
CREATE FUNCTION logfunc1(logtxt text) RETURNS void AS $$
BEGIN
INSERT INTO logtable VALUES (logtxt, ’now’);
END;
$$ LANGUAGE plpgsql;
and:
CREATE FUNCTION logfunc2(logtxt text) RETURNS void AS $$
DECLARE
curtime timestamp;
BEGIN
curtime := ’now’;
INSERT INTO logtable VALUES (logtxt, curtime);
END;
$$ LANGUAGE plpgsql;
In the case of
logfunc1
,the PostgreSQL main parser knows when analyzing the
INSERT
that the
string
’now’
should be interpreted as
timestamp
,because the target column of
logtable
is of that
type. Thus,
’now’
will be converted to a
timestamp
constant when the
INSERT
is analyzed, and
thenused inall invocations of
logfunc1
during the lifetime of the session. Needless to say, this isn’t
what the programmer wanted. A better idea is to use the
now()
or
current_timestamp
function.
Inthe caseof
logfunc2
,thePostgreSQL mainparser does not knowwhat type
’now’
shouldbecome
and therefore it returns a data value of type
text
containing the string
now
.During the ensuing as-
signment to the local variable
curtime
,the PL/pgSQL interpreter casts this string tothe
timestamp
type by calling the
text_out
and
timestamp_in
functions for the conversion. So, the computed
time stamp is updated on each execution as the programmer expects. Even though this happens to
work as expected, it’s not terribly efficient, so use of the
now()
function would still be a better idea.
40.11. Tips for Developing in PL/pgSQL
Onegood waytodevelop in PL/pgSQL is to usethetext editor of your choice to createyour functions,
and in another window, use psql to load and test those functions. If you are doing it this way, it is a
1079
C# WinForms Viewer: Load, View, Convert, Annotate and Edit PDF
Convert PDF to Tiff image (.tif, .tiff). • Convert PDF to HTML (.htm, .html). PDF Annotation. • Add sticky notes to PDF document in preview.
how to add photo to pdf in preview; add photo to pdf online
C# WPF Viewer: Load, View, Convert, Annotate and Edit PDF
PDF to Tiff image (.tif, .tiff). • Convert PDF to HTML (.htm, .html). PDF Annotation. • Add sticky notes to PDF document. • Highlight PDF text in preview.
add photo to pdf preview; add image to pdf file
Chapter 40. PL/pgSQL - SQL Procedural Language
good ideatowrite the function using
CREATE OR REPLACE FUNCTION
.Thatway youcanjustreload
the file to update the function definition. For example:
CREATE OR REPLACE FUNCTION testfunc(integer) RETURNS integer AS $$
....
$$ LANGUAGE plpgsql;
While running psql, you can load or reload such a function definition file with:
\i filename.sql
and then immediately issue SQL commands to test the function.
Another good way to develop in PL/pgSQL is with a GUI database access tool that facilitates de-
velopment in a procedural language. One example of such a tool is pgAdmin, although others exist.
These tools often provide convenient features such as escaping single quotes and making it easier to
recreate and debug functions.
40.11.1. Handling of Quotation Marks
The code of a PL/pgSQL function is specified in
CREATE FUNCTION
as a string literal. If you write
the string literal in the ordinary way with surrounding single quotes, then any single quotes inside
the function body must be doubled; likewise any backslashes must be doubled (assuming escape
string syntax is used). Doublingquotes is at best tedious, and in more complicated cases the code can
become downright incomprehensible, because you can easily find yourself needing half a dozen or
more adjacent quote marks. It’s recommended that you instead write the function body as a “dollar-
quoted”stringliteral (see Section 4.1.2.4). Inthedollar-quoting approach, younever double any quote
marks, but instead take care to choose a different dollar-quoting delimiter for each level of nesting
you need. For example, you might write the
CREATE FUNCTION
command as:
CREATE OR REPLACE FUNCTION testfunc(integer) RETURNS integer AS $PROC$
....
$PROC$ LANGUAGE plpgsql;
Within this, you might use quote marks for simple literal strings in SQL commands and
$$
todelimit
fragments of SQL commands that youare assembling as strings. If youneed to quote textthat includes
$$
,you coulduse
$Q$
,and so on.
The following chart shows what you have to do when writing quote marks without dollar quoting. It
might be useful whentranslating pre-dollar quotingcode into something more comprehensible.
1quotation mark
To begin and end the function body, for example:
CREATE FUNCTION foo() RETURNS integer AS ’
....
’ LANGUAGE plpgsql;
Anywhere within a single-quoted function body, quote marks must appear in pairs.
2quotation marks
For string literals inside the function body, for example:
a_output := ”Blah”;
SELECT
*
FROM users WHERE f_name=”foobar”;
In the dollar-quoting approach, you’d just write:
1080
How to C#: Preview Document Content Using XDoc.Word
C# DLLs for Word File Preview. Add references: Get Preview From File. You may get document preview image from an existing Word file in C#.net.
add image to pdf preview; add image pdf
How to C#: Preview Document Content Using XDoc.PowerPoint
Add necessary XDoc.PowerPoint DLL libraries into your created C# application as You may get document preview image from an existing PowerPoint file in C#.net.
how to add a jpeg to a pdf file; acrobat add image to pdf
Chapter 40. PL/pgSQL - SQL Procedural Language
a_output := ’Blah’;
SELECT
*
FROM users WHERE f_name=’foobar’;
which is exactly what the PL/pgSQL parser would see in either case.
4quotation marks
Whenyouneeda singlequotationmarkinastringconstantinsidethefunctionbody, for example:
a_output := a_output || ” AND name LIKE ””foobar”” AND xyz”
The value actuallyappendedto
a_output
would be:
AND name LIKE ’foobar’ AND xyz
.
In the dollar-quoting approach, you’d write:
a_output := a_output || $$ AND name LIKE ’foobar’ AND xyz$$
being careful that any dollar-quote delimiters around this are not just
$$
.
6quotation marks
When a single quotation mark in a string inside the function body is adjacent to the end of that
string constant, for example:
a_output := a_output || ” AND name LIKE ””foobar”””
The value appended to
a_output
would then be:
AND name LIKE ’foobar’
.
In the dollar-quoting approach, this becomes:
a_output := a_output || $$ AND name LIKE ’foobar’$$
10 quotation marks
When you want two single quotation marks in a string constant (which accounts for 8 quotation
marks) and this is adjacent to the end of that string constant (2 more). You will probably only
need that if you are writing a function that generates other functions, as in Example 40-9. For
example:
a_output := a_output || ” if v_” ||
referrer_keys.kind || ” like ”””””
|| referrer_keys.key_string || ”””””
then return ”””
|| referrer_keys.referrer_type
|| ”””; end if;”;
The value of
a_output
would then be:
if v_... like ”...” then return ”...”; end if;
In the dollar-quoting approach, this becomes:
a_output := a_output || $$ if v_$$ || referrer_keys.kind || $$ like ’$$
|| referrer_keys.key_string || $$’
then return ’$$
|| referrer_keys.referrer_type
|| $$’; end if;$$;
where we assume we only need to put single quote marks into
a_output
,because it will be
re-quoted before use.
40.11.2. Additional Compile-time Checks
To aid the user in finding instances of simple but common problems before they cause harm,
PL/PgSQL provides additional
checks
.When enabled, depending on the configuration, they can be
used to emit either a
WARNING
or an
ERROR
during the compilation of a function. A function which
has received a
WARNING
can be executed without producing further messages, so you are advised to
test in a separate development environment.
These additionalchecks areenabledthroughthe configurationvariables
plpgsql.extra_warnings
for warnings and
plpgsql.extra_errors
for errors. Both can be set either to a comma-separated
1081
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
enables compressing and decompressing in preview in ASP.NET to reduce or minimize original PDF document size Reduce image resources: Since images are usually or
how to add image to pdf document; add picture to pdf in preview
How to C#: Preview Document Content Using XDoc.excel
Add necessary references: RasterEdge.Imaging.Basic.dll. Get Preview From File. You may get document preview image from an existing Excel file in C#.net.
add picture to pdf preview; add image to pdf form
Chapter 40. PL/pgSQL - SQL Procedural Language
listof checks,
"none"
or
"all"
.Thedefaultis
"none"
.Currentlythe list of availablechecks includes
only one:
shadowed_variables
Checks if a declaration shadows a previously defined variable.
The following example shows the effect of
plpgsql.extra_warnings
set to
shadowed_variables
:
SET plpgsql.extra_warnings TO ’shadowed_variables’;
CREATE FUNCTION foo(f1 int) RETURNS int AS $$
DECLARE
f1 int;
BEGIN
RETURN f1;
END
$$ LANGUAGE plpgsql;
WARNING:
variable "f1" shadows a previously defined variable
LINE 3: f1 int;
^
CREATE FUNCTION
40.12. Porting from Oracle PL/SQL
This section explains differences between PostgreSQL’s PL/pgSQL language and Oracle’s PL/SQL
language, to help developers who port applications from Oracle® to PostgreSQL.
PL/pgSQL is similar to PL/SQL in many aspects. It is a block-structured, imperative language, and
all variables have to be declared. Assignments, loops, conditionals are similar. The main differences
you should keep in mind when porting from PL/SQL to PL/pgSQL are:
If a name used in a SQL command could be either a column name of a table or a reference to
avariable of the function, PL/SQL treats it as a column name. This corresponds to PL/pgSQL’s
plpgsql.variable_conflict
=
use_column
behavior, which is not the default, as explained
in Section 40.10.1. It’s often best toavoidsuch ambiguities inthe firstplace, butif you have to port
alarge amount of code that depends on this behavior, setting
variable_conflict
may be the
best solution.
In PostgreSQL the function body must be written as a string literal. Therefore you need to use
dollar quoting or escape single quotes in the function body. (See Section 40.11.1.)
Instead of packages, use schemas to organize your functions into groups.
Since there are no packages, therearenopackage-levelvariables either. This issomewhatannoying.
You can keep per-session state in temporary tables instead.
Integer
FOR
loops with
REVERSE
work differently: PL/SQL counts down from the second num-
ber to the first, while PL/pgSQL counts down from the first number to the second, requiring the
loop bounds to be swapped when porting. This incompatibility is unfortunate but is unlikely to be
changed. (See Section 40.6.3.5.)
1082
How to C#: Set Image Thumbnail in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word following steps below, you can create an image viewer WinForm Open or create a new WinForms application, add necessary dll
add picture to pdf document; attach image to pdf form
C# PDF remove image library: remove, delete images from PDF in C#.
Generally speaking, using well-designed APIs, C# developers can do following things. Remove Image from PDF Page Using C#. Add necessary references:
how to add image to pdf file; how to add image to pdf acrobat
Chapter 40. PL/pgSQL - SQL Procedural Language
FOR
loops over queries (other than cursors) also work differently: the target variable(s) must have
been declared, whereas PL/SQL always declares them implicitly. An advantage of this is that the
variable values are still accessible after the loop exits.
There are various notational differences for the use of cursor variables.
40.12.1. Porting Examples
Example 40-8 shows how to port a simple function from PL/SQL to PL/pgSQL.
Example 40-8. Porting a Simple Function from PL/SQL toPL/pgSQL
Here is an Oracle PL/SQL function:
CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name varchar,
v_version varchar)
RETURN varchar IS
BEGIN
IF v_version IS NULL THEN
RETURN v_name;
END IF;
RETURN v_name || ’/’ || v_version;
END;
/
show errors;
Let’s go through this function and see the differences compared to PL/pgSQL:
The
RETURN
key word in the function prototype (not the function body) becomes
RETURNS
in
PostgreSQL. Also,
IS
becomes
AS
,andyou need to add a
LANGUAGE
clause because PL/pgSQL is
not the onlypossible function language.
In PostgreSQL, thefunction body isconsidered to be a string literal, soyouneed tousequote marks
or dollar quotes around it. This substitutes for the terminating
/
in the Oracle approach.
The
show errors
command does not exist in PostgreSQL, and is not needed since errors are
reported automatically.
This is how this functionwould look when ported to PostgreSQL:
CREATE OR REPLACE FUNCTION cs_fmt_browser_version(v_name varchar,
v_version varchar)
RETURNS varchar AS $$
BEGIN
IF v_version IS NULL THEN
RETURN v_name;
END IF;
RETURN v_name || ’/’ || v_version;
END;
$$ LANGUAGE plpgsql;
Example 40-9 shows how to port a function that creates another function and how to handle the
ensuing quoting problems.
1083
Chapter 40. PL/pgSQL - SQL Procedural Language
Example 40-9. Porting a Function that Creates Another Function from PL/SQL to PL/pgSQL
The following procedure grabs rows from a
SELECT
statement and builds a large function with the
results in
IF
statements, for the sake of efficiency.
This is the Oracle version:
CREATE OR REPLACE PROCEDURE cs_update_referrer_type_proc IS
CURSOR referrer_keys IS
SELECT
*
FROM cs_referrer_keys
ORDER BY try_order;
func_cmd VARCHAR(4000);
BEGIN
func_cmd := ’CREATE OR REPLACE FUNCTION cs_find_referrer_type(v_host IN VARCHAR,
v_domain IN VARCHAR, v_url IN VARCHAR) RETURN VARCHAR IS BEGIN’;
FOR referrer_key IN referrer_keys LOOP
func_cmd := func_cmd ||
’ IF v_’ || referrer_key.kind
|| ’ LIKE ”’ || referrer_key.key_string
|| ”’ THEN RETURN ”’ || referrer_key.referrer_type
|| ”’; END IF;’;
END LOOP;
func_cmd := func_cmd || ’ RETURN NULL; END;’;
EXECUTE IMMEDIATE func_cmd;
END;
/
show errors;
Here is how this function would end up in PostgreSQL:
CREATE OR REPLACE FUNCTION cs_update_referrer_type_proc() RETURNS void AS $func$
DECLARE
referrer_keys CURSOR IS
SELECT
*
FROM cs_referrer_keys
ORDER BY try_order;
func_body text;
func_cmd text;
BEGIN
func_body := ’BEGIN’;
FOR referrer_key IN referrer_keys LOOP
func_body := func_body ||
’ IF v_’ || referrer_key.kind
|| ’ LIKE ’ || quote_literal(referrer_key.key_string)
|| ’ THEN RETURN ’ || quote_literal(referrer_key.referrer_type)
|| ’; END IF;’ ;
END LOOP;
func_body := func_body || ’ RETURN NULL; END;’;
func_cmd :=
’CREATE OR REPLACE FUNCTION cs_find_referrer_type(v_host varchar,
v_domain varchar,
v_url varchar)
RETURNS varchar AS ’
|| quote_literal(func_body)
1084
Chapter 40. PL/pgSQL - SQL Procedural Language
|| ’ LANGUAGE plpgsql;’ ;
EXECUTE func_cmd;
END;
$func$ LANGUAGE plpgsql;
Notice how the body of the function is built separately and passed through
quote_literal
to
double any quote marks in it. This technique is needed because we cannot safely use dollar quoting
for defining the new function: we do not know for sure what strings will be interpolated from the
referrer_key.key_string
field. (We are assuming here that
referrer_key.kind
can be
trusted to always be
host
,
domain
,or
url
,but
referrer_key.key_string
might be anything,
in particular it might contain dollar signs.) This function is actually an improvement on the
Oracle original, because it will not generate broken code when
referrer_key.key_string
or
referrer_key.referrer_type
contain quote marks.
Example 40-10 shows how to port a function with
OUT
parameters and string manipulation. Post-
greSQL does not have a built-in
instr
function, but you can create one using a combination of other
functions. InSection 40.12.3 thereis a PL/pgSQL implementationof
instr
that you canuse tomake
your porting easier.
Example 40-10. Porting a Procedure With String Manipulation and
OUT
Parameters from
PL/SQL to PL/pgSQL
The following Oracle PL/SQL procedure is used to parse a URL and return several elements (host,
path, and query).
This is the Oracle version:
CREATE OR REPLACE PROCEDURE cs_parse_url(
v_url IN VARCHAR,
v_host OUT VARCHAR,
-- This will be passed back
v_path OUT VARCHAR,
-- This one too
v_query OUT VARCHAR) -- And this one
IS
a_pos1 INTEGER;
a_pos2 INTEGER;
BEGIN
v_host := NULL;
v_path := NULL;
v_query := NULL;
a_pos1 := instr(v_url, ’//’);
IF a_pos1 = 0 THEN
RETURN;
END IF;
a_pos2 := instr(v_url, ’/’, a_pos1 + 2);
IF a_pos2 = 0 THEN
v_host := substr(v_url, a_pos1 + 2);
v_path := ’/’;
RETURN;
END IF;
v_host := substr(v_url, a_pos1 + 2, a_pos2 - a_pos1 - 2);
a_pos1 := instr(v_url, ’?’, a_pos2 + 1);
IF a_pos1 = 0 THEN
1085
Chapter 40. PL/pgSQL - SQL Procedural Language
v_path := substr(v_url, a_pos2);
RETURN;
END IF;
v_path := substr(v_url, a_pos2, a_pos1 - a_pos2);
v_query := substr(v_url, a_pos1 + 1);
END;
/
show errors;
Here is a possible translation into PL/pgSQL:
CREATE OR REPLACE FUNCTION cs_parse_url(
v_url IN VARCHAR,
v_host OUT VARCHAR,
-- This will be passed back
v_path OUT VARCHAR,
-- This one too
v_query OUT VARCHAR) -- And this one
AS $$
DECLARE
a_pos1 INTEGER;
a_pos2 INTEGER;
BEGIN
v_host := NULL;
v_path := NULL;
v_query := NULL;
a_pos1 := instr(v_url, ’//’);
IF a_pos1 = 0 THEN
RETURN;
END IF;
a_pos2 := instr(v_url, ’/’, a_pos1 + 2);
IF a_pos2 = 0 THEN
v_host := substr(v_url, a_pos1 + 2);
v_path := ’/’;
RETURN;
END IF;
v_host := substr(v_url, a_pos1 + 2, a_pos2 - a_pos1 - 2);
a_pos1 := instr(v_url, ’?’, a_pos2 + 1);
IF a_pos1 = 0 THEN
v_path := substr(v_url, a_pos2);
RETURN;
END IF;
v_path := substr(v_url, a_pos2, a_pos1 - a_pos2);
v_query := substr(v_url, a_pos1 + 1);
END;
$$ LANGUAGE plpgsql;
This function could be used like this:
SELECT
*
FROM cs_parse_url(’http://foobar.com/query.cgi?baz’);
Example 40-11 shows howtoport a procedure that uses numerous features that arespecific toOracle.
1086
Chapter 40. PL/pgSQL - SQL Procedural Language
Example 40-11. Porting a Procedure from PL/SQL to PL/pgSQL
The Oracle version:
CREATE OR REPLACE PROCEDURE cs_create_job(v_job_id IN INTEGER) IS
a_running_job_count INTEGER;
PRAGMA AUTONOMOUS_TRANSACTION;˚
BEGIN
LOCK TABLE cs_jobs IN EXCLUSIVE MODE;¸
SELECT count(
*
) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL;
IF a_running_job_count > 0 THEN
COMMIT; -- free lockÌ
raise_application_error(-20000,
’Unable to create a new job: a job is currently running.’);
END IF;
DELETE FROM cs_active_job;
INSERT INTO cs_active_job(job_id) VALUES (v_job_id);
BEGIN
INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, sysdate);
EXCEPTION
WHEN dup_val_on_index THEN NULL; -- don’t worry if it already exists
END;
COMMIT;
END;
/
show errors
Procedures like this can easily be converted into PostgreSQL functions returning
void
.This proce-
dure in particular is interesting because it can teach us some things:
˚
There is no
PRAGMA
statement in PostgreSQL.
¸
If youdo a
LOCK TABLE
in PL/pgSQL, the lock will notbe released until the calling transaction
is finished.
Ì
You cannot issue
COMMIT
in a PL/pgSQL function. The function is running within some outer
transaction and so
COMMIT
would imply terminating the function’s execution. However, in this
particular case it is notnecessary anyway, because the lock obtained by the
LOCK TABLE
will be
released when we raise an error.
This is how we could port this procedure to PL/pgSQL:
CREATE OR REPLACE FUNCTION cs_create_job(v_job_id integer) RETURNS void AS $$
DECLARE
a_running_job_count integer;
BEGIN
LOCK TABLE cs_jobs IN EXCLUSIVE MODE;
SELECT count(
*
) INTO a_running_job_count FROM cs_jobs WHERE end_stamp IS NULL;
IF a_running_job_count > 0 THEN
RAISE EXCEPTION ’Unable to create a new job: a job is currently running’;˚
END IF;
1087
Documents you may be interested
Documents you may be interested