Can I make a crossfade loop?
So lets say I have a minute of room ambience or mood music. I need to chop out 30 seconds and loop it totally seamless for a website—not just picking a good start and stop but grabing a little from each end and crossfading. This is something you can do in Peak and Sound Forge.
Again, not looking to simply make a music loop but a loop that crossfades the head and tail of the clip with each other.
Thanks
Hi,
you just need to add "X" to iteration number of outer loop "I" and wire the result to the number of iterations of the inner loop "N".
Look on the diagram of attached example.
Good luck.
Oleg Chutko.
Attachments:
2loop.vi 19 KB
Similar Messages
-
How can I make a while loop wait 10 seconds before iterations​?
I am using labview to for an osmosis system that measures the amout of water lost from the reading on a scale.
I currently have the program displaying the data from 3 scales every second.
I also need to calculate the flux through the membrane over time.
I do this with a function that takes a change in the scale reading over time (with a shift register) followed by a series of mathematical conversions.
The readings from the scale display OK every second, but I need to have at least 10 seconds between flux calculations.
So my question is, how do I make a the shift register take one value from the scale, then wait 10 seconds before taking the second value? That way I have the mass of water lost over a 10 msecond period.
Below is my current while loop for Flux using shift registers from data from 3 scales.
Any helkp would be great!
Also, I'm new at LabVIEW...Bob_Schor wrote:
Do you understand how Dataflow (a key idea behind LabVIEW) works? If you put a Wait (ms) function (on the Timing Palette) with 10000 (10,000 milliseconds = 10 seconds) inside your While Loop, the principles of Data Flow will require all of the functions inside the While (specifically the Wait function) to finish their execution before the loop can run again. As everything else in the loop takes approximately 0 seconds, this will make your loop run once every 10 seconds.
Bob Schor
I do not think that is a good idea.
The inner loop should be in sync with the outer loop, not run independent on it's own timer.
If the inner loop is running independently you run the risk of using stale data.
Actually altenbach is right the inner loop does not need to be a for loop at all, but rather just a case like my suggestion (without the for loop) and the shift registers should be out on the main loop.
My suggestion was a quick solution going by what little bit of the block diagram I could see, but if the entire code was posted I am sure we would see where more improvements could be made and possibly even a better solution. -
How can I make a while loop wait for input boolean?
Hi.
I'm trying to control a robotic arm with labview for my undergrad dissertation, and I have a decent polar coordinate control panel made, but there is one problem; it checks for changes in the coordinates every five seconds, while I want it to only check on the touch of a button (ie, go!, I've changed your coordinates!). The changes are calculated with a while loop comparing the last value of theta, x and z in a while loop with the current one. I can't find a way of putting that into a case structure. If there is a way of making the while loop progress at the push of a button, I think it would work. The VI's attached below.
Thanks in advance for any help.
Cathal Scanlon
ps, sorry about the mess, I'm going to reorganise the while loop into 2 if I can get the control button working.
Message Edited by CatScan on 02-08-2007 02:45 PM
Attachments:
Polar coord assignment1.vi 142 KBHave you tried using an event structure? To use one, right click on the structure to add an event. Set the event as whatever button you wish to monitor and set the event to "Value Change". If you put this inside a while loop any time the button is pressed, the event structure will run the contents inside the loop. There are a number of options to have the event structure activate.
*** Warning! I'm probably the last guy you want answering your labVIEW questions, but I figured I might be able to help. -
I've always assumed that I can't make any assumptions about the order in which elements are indexed by a for...each...in loop. Not even for a conventional indexed array. (Emphasis!: I'm not talking about associative arrays here, I'm talking about normal indexed arrays. Dense, no gaps.).
for each (var element:ElementClass in myArray) {}
May not traverse the array from first to last. I've never assumed that it's guaranteed anyway. Neither does the ECMA standard. I assume the compiler/runtime is at liberty to index the array in any order, which may even be different each time.
Whereas... for (var i:int=0;i<myArray.length;i++) {......var element:ElementClass=myArray[i]....}
....Is guaranteed to traverse the array from first to last. So I always use this looping statement if the ordering is important.
MY QUESTION IS.... In ActionScript 3, Can I just assume that the for..each..in will always traverse a dense indexed array from first to last?
Actually, my specific case at the moment is where another programmer is passing me an array,assembled within a for...each..in loop. But I need to assume the order of that array. If this is always going to work in ActionScript3, then no problem. Although I'll continue to worry about the ECMA standard for my own code, and wont make assumptions about ordering - but I won't force my anal-retentive programming style on the other guy.I did a test on it
case1:
var arr:Array = new Array();
arr[0] = 'a';
arr[1] = 'b';
arr[2] = 'c';
arr[3] = 'd';
for each(var arrEle:string in arr)
trace(arrEle);
always output a,b,c,d
case2:
var arr:Array = new Array();
arr[6] = 'd';
arr[0] = 'a';
arr[1] = 'b';
arr[3] = 'c';
for each(var arrEle:string in arr)
trace(arrEle);
always output a,b,d,c
so I assume array is created in this way: alloc a memory block for array first, when attaching new element(numeric indexd by i) to array, check if i >= length, put new element in the end of array, else put element at i; so in case 2, array is alloced in this way
array:{'d'} //6>0
array:{'a', 'd'} //0<1
array:{'a', 'b', 'd'} //1<2
array:{'a', 'b', 'd', 'c'} //3>=3
disclaimer: totally assumption!!! -
How can I repeat a for loop, once it's terms has been fulfilled???
Well.. I've posted 2 different exceptions about this game today, but I managed to fix them all by myself, but now I'm facing another problem, which is NOT an error, but just a regular question.. HOW CAN I REPEAT A FOR LOOP ONCE IT HAS FULFILLED IT'S TERMS OF RUNNING?!
I've been trying many different things, AND, the 'continue' statement too, and I honestly think that what it takes IS a continue statement, BUT I don't know how to use it so that it does what I want it too.. -.-'
Anyway.. Enought chit-chat. I have a nice functional game running that maximum allows 3 apples in the air in the same time.. But now my question is: How can I make it create 3 more appels once the 3 first onces has either been catched or fallen out the screen..?
Here's my COMPLETE sourcecode, so if you know just a little bit of Java you should be able to figure it out, and hopefully you'll be able to tell me what to do now, to make it repeat my for loop:
Main.java:
import java.applet.*;
import java.awt.*;
@SuppressWarnings("serial")
public class Main extends Applet implements Runnable
private Image buffering_image;
private Graphics buffering_graphics;
private int max_apples = 3;
private int score = 0;
private GameObject player;
private GameObject[] apple = new GameObject[max_apples];
private boolean move_left = false;
private boolean move_right = false;
public void init()
load_content();
setBackground(Color.BLACK);
public void run()
while(true)
if(move_left)
player.player_x -= player.movement_speed;
else if(move_right)
player.player_x += player.movement_speed;
for(int i = 0; i < max_apples; i++)
apple.apple_y += apple[i].falling_speed;
repaint();
prevent();
collision();
try
Thread.sleep(20);
catch(InterruptedException ie)
System.out.println(ie);
private void prevent()
if(player.player_x <= 0)
player.player_x = 0;
else if(player.player_x >= 925)
player.player_x = 925;
private void load_content()
MediaTracker media = new MediaTracker(this);
player = new GameObject(getImage(getCodeBase(), "Sprites/player.gif"));
media.addImage(player.sprite, 0);
for(int i = 0; i < max_apples; i++)
apple[i] = new GameObject(getImage(getCodeBase(), "Sprites/apple.jpg"));
try
media.waitForAll();
catch(Exception e)
System.out.println(e);
public boolean collision()
for(int i = 0; i < max_apples; i++)
Rectangle apple_rect = new Rectangle(apple[i].apple_x, apple[i].apple_y,
apple[i].sprite.getWidth(this),
apple[i].sprite.getHeight(this));
Rectangle player_rect = new Rectangle(player.player_x, player.player_y,
player.sprite.getWidth(this),
player.sprite.getHeight(this));
if(apple_rect.intersects(player_rect))
if(apple[i].alive)
score++;
apple[i].alive = false;
if(!apple[i].alive)
apple[i].alive = false;
return true;
public void update(Graphics g)
if(buffering_image == null)
buffering_image = createImage(getSize().width, getSize().height);
buffering_graphics = buffering_image.getGraphics();
buffering_graphics.setColor(getBackground());
buffering_graphics.fillRect(0, 0, getSize().width, getSize().height);
buffering_graphics.setColor(getForeground());
paint(buffering_graphics);
g.drawImage(buffering_image, 0, 0, this);
public boolean keyDown(Event e, int i)
i = e.key;
if(i == 1006)
move_left = true;
else if(i == 1007)
move_right = true;
return true;
public boolean keyUp(Event e, int i)
i = e.key;
if(i == 1006)
move_left = false;
else if(i == 1007)
move_right = false;
return true;
public void paint(Graphics g)
g.drawImage(player.sprite, player.player_x, player.player_y, this);
for(int i = 0; i < max_apples; i++)
if(apple[i].alive)
g.drawImage(apple[i].sprite, apple[i].apple_x, apple[i].apple_y, this);
g.setColor(Color.RED);
g.drawString("Score: " + score, 425, 100);
public void start()
Thread thread = new Thread(this);
thread.start();
@SuppressWarnings("deprecation")
public void stop()
Thread thread = new Thread(this);
thread.stop();
GameObject.java:import java.awt.*;
import java.util.*;
public class GameObject
public Image sprite;
public Random random = new Random();
public int player_x;
public int player_y;
public int movement_speed = 15;
public int falling_speed;
public int apple_x;
public int apple_y;
public boolean alive;
public GameObject(Image loaded_image)
player_x = 425;
player_y = 725;
sprite = loaded_image;
falling_speed = random.nextInt(10) + 1;
apple_x = random.nextInt(920) + 1;
apple_y = random.nextInt(100) + 1;
alive = true;
And now all I need is you to answer my question! =)package forums;
import java.util.Random;
import javax.swing.Timer;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
public class VimsiesRetardedAppleGamePanel extends JPanel implements KeyListener
private static final long serialVersionUID = 1L;
private static final int WIDTH = 800;
private static final int HEIGHT = 600;
private static final int MAX_APPLES = 3;
private static final Random RANDOM = new Random();
private int score = 0;
private Player player;
private Apple[] apples = new Apple[MAX_APPLES];
private boolean moveLeft = false;
private boolean moveRight = false;
abstract class Sprite
public final Image image;
public int x;
public int y;
public boolean isAlive = true;
public Sprite(String imageFilename, int x, int y) {
try {
this.image = ImageIO.read(new File(imageFilename));
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException("Bailing out: Can't load images!");
this.x = x;
this.y = y;
this.isAlive = true;
public Rectangle getRectangle() {
return new Rectangle(x, y, image.getWidth(null), image.getHeight(null));
class Player extends Sprite
public static final int SPEED = 15;
public Player() {
super("C:/Java/home/src/images/player.jpg", WIDTH/2, 0);
y = HEIGHT-image.getHeight(null)-30;
class Apple extends Sprite
public int fallingSpeed;
public Apple() {
super("C:/Java/home/src/images/apple.jpg", 0, 0);
reset();
public void reset() {
this.x = RANDOM.nextInt(WIDTH-image.getWidth(null));
this.y = RANDOM.nextInt(300);
this.fallingSpeed = RANDOM.nextInt(8) + 3;
this.isAlive = true;
private final Timer timer = new Timer(200,
new ActionListener() {
public void actionPerformed(ActionEvent e) {
repaint();
public VimsiesRetardedAppleGamePanel() {
this.player = new Player();
for(int i=0; i<MAX_APPLES; i++) {
apples[i] = new Apple();
setBackground(Color.BLACK);
setFocusable(true); // required to generate key listener events.
addKeyListener(this);
timer.setInitialDelay(1000);
timer.start();
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == e.VK_LEFT) {
moveLeft = true;
moveRight = false;
} else if (e.getKeyCode() == e.VK_RIGHT) {
moveRight = true;
moveLeft = false;
public void keyReleased(KeyEvent e) {
moveRight = false;
moveLeft = false;
public void keyTyped(KeyEvent e) {
// do nothing
public void paintComponent(Graphics g) {
super.paintComponent(g);
//System.err.println("DEBUG: moveLeft="+moveLeft+", moveRight="+moveRight);
if ( moveLeft ) {
player.x -= player.SPEED;
if (player.x < 0) {
player.x = 0;
} else if ( moveRight ) {
player.x += player.SPEED;
if (player.x > getWidth()) {
player.x = getWidth();
//System.err.println("DEBUG: player.x="+player.x);
Rectangle playerRect = player.getRectangle();
for ( Apple apple : apples ) {
apple.y += apple.fallingSpeed;
Rectangle appleRect = apple.getRectangle();
if ( appleRect.intersects(playerRect) ) {
if ( apple.isAlive ) {
score++;
apple.isAlive = false;
g.drawImage(player.image, player.x, player.y, this);
for( Apple apple : apples ) {
if ( apple.isAlive ) {
g.drawImage(apple.image, apple.x, apple.y, this);
g.setColor(Color.RED);
g.drawString("Score: " + score, WIDTH/2-30, 10);
private static void createAndShowGUI() {
JFrame frame = new JFrame("Vimsies Retarded Apple Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new VimsiesRetardedAppleGamePanel());
frame.pack();
frame.setSize(WIDTH, HEIGHT);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
public static void main(String[] args) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
createAndShowGUI();
}Hey Vimsie, try resetting a dead apple and see what happens. -
Working in Logic 9, how do I use a drum loop WITH ITS PRESET EFFECTS? I can drag and drop the loop but it plays dry in timeline. thanks
Here's the short-cut solution:
Green Apple tracks are MIDI files (so to speak). If you drag one from the loop browser (Capitol C Orchestral hit, as you mentioned in this exable) directly into the arrange page it creates the MIDI file and the instrument to play it back on.
HOWEVER.If you create and audio track first, THEN drag the green Apple loop onto that track, the loop will get "bounced" with the reverb in tact and you'll have the exact sound that you heard in the preview.
Make sense? -
How can I make a book/podcast listening playlist for a blind person?
How can I make a book/podcast listening playlist for a blind person? How can lots of content be loaded, so that no navigation is required, for hundreds of hours of enjoyment?
I wanted to create a single playlist with hundreds of hours of books and podcasts for my grandmother who is blind. Then I planned to use something like the app CarTunes which basically makes the touch screen simply a gigantic pause/play button for an already created playlist. This is perfect for a blind person. The problem: Apple no longer allows you to have a playlist with Audible Books and Podcasts. I have tried; but the podcasts and books are stripped from the playlist. It seems like all podcast and book players require navigation. (How aggravating!?)
Any help in creating hundreds of hours long spoken (selected between books and podcasts) audio content playlist for a blind person would be much appreciated!!!!Well, good news and bad news. I found out how to tell iTunes that all my music videos are, in fact, actual "music videos" and categorize them as such. In the "Get Info" screen for a track, there is a dropdown selector where you can pick the "meta" type, such as "Music Video", "Home Video", "Movie", "TV Show", etc. This allows iTunes and iOS to think they are all music videos and play them in the same list.
Unfortunately, this is not compatable with my third party device, which is now refusing to play my music videos in a playlist and will only play them one at a time (in a single-track infinite loop no less). Very frustrating! -
How can I make my Contact Form send info to my email?
Greetings! I have below a contact form that i have creaed with some help but I can't seem to make it send the information to my email address after it is submitted. That is my most important issue right now.
A secondary issue is, can I make it so once this form is submitted it send the info to my email without doing a page redirect?
Thanks in advance!Ok what about this code located at www.ybcreations.com/ContactTest.php?
<?php
// Set email variables
$email_to = '[email protected]';
$email_subject = 'BestMarketingNames Inquiry';
// Set required fields
$required_fields = array('fullname','email','comment');
// set error messages
$error_messages = array(
'fullname' => 'Please enter a Name to proceed.',
'email' => 'Please enter a valid Email Address to continue.',
'comment' => 'Please enter your Message to continue.'
// Set form status
$form_complete = FALSE;
// configure validation array
$validation = array();
// check form submittal
if(!empty($_POST)) {
// Sanitise POST array
foreach($_POST as $key => $value) $_POST[$key] = remove_email_injection(trim($value));
// Loop into required fields and make sure they match our needs
foreach($required_fields as $field) {
// the field has been submitted?
if(!array_key_exists($field, $_POST)) array_push($validation, $field);
// check there is information in the field?
if($_POST[$field] == '') array_push($validation, $field);
// validate the email address supplied
if($field == 'email') if(!validate_email_address($_POST[$field])) array_push($validation, $field);
// basic validation result
if(count($validation) == 0) {
// Prepare our content string
$email_content = 'New Website Comment: ' . "\n\n";
// simple email content
foreach($_POST as $key => $value) {
if($key != 'submit') $email_content .= $key . ': ' . $value . "\n";
// if validation passed ok then send the email
mail($email_to, $email_subject, $email_content);
// Update form switch
$form_complete = TRUE;
function validate_email_address($email = FALSE) {
return (preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i', $email))? TRUE : FALSE;
function remove_email_injection($field = FALSE) {
return (str_ireplace(array("\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:"), '', $field));
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- Contact Form Designed by James Brand @ dreamweavertutorial.co.uk -->
<!-- Covered under creative commons license - http://dreamweavertutorial.co.uk/permissions/contact-form-permissions.htm -->
<title>Contact Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="Billy testing/ContactForm.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/mootools/1.3.0/mootools-yui-compressed.js"></script>
<script type="text/javascript" src="Billy testing/validation/validation.js"></script>
<script type="text/javascript">
var nameError = '<?php echo $error_messages['fullname']; ?>';
var emailError = '<?php echo $error_messages['email']; ?>';
var commentError = '<?php echo $error_messages['comment']; ?>';
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
</script>
</head>
<body onload="MM_preloadImages('Billy testing/x.png')">
<div id="formWrap">
<h2>We appreciate your business</h2>
<div id="form">
<?php if($form_complete === FALSE): ?>
<form action="ContactTest.php" method="post" id="comments_form">
<div class="row">
<div class="label">Your Name</div> <!--end .label -->
<div class="input">
<input type="text" id="fullname" class="detail" name="fullname" value="<?php echo isset($_POST['fullname'])? $_POST['fullname'] : ''; ?>"/><?php if(in_array('fullname', $validation)): ?><span class="error"><?php echo $error_messages['fullname']; ?></span><?php endif; ?>
</div><!-- end. input --><!-- end .context -->
</div><!-- end .row -->
<div class="row">
<div class="label">Your Email Address</div> <!--end .label -->
<div class="input">
<input type="text" id="email" class="detail" name="email" value="<?php echo isset($_POST['email'])? $_POST['email'] : ''; ?>"/><?php if(in_array('email', $validation)): ?><span class="error"><?php echo $error_messages['email']; ?></span><?php endif; ?>
</div><!-- end. input --><!-- end .context -->
</div><!-- end .row -->
<div class="row">
<div class="label">Comments</div> <!--end .label -->
<div class="input">
<textarea id="comment" name="comment" class="mess"><?php echo isset($_POST['comment'])? $_POST['comment'] : ''; ?></textarea><?php if(in_array('comment', $validation)): ?><span class="error"><?php echo $error_messages['comment']; ?></span><?php endif; ?>
</div><!-- end. input -->
</div><!-- end .row -->
<div class="submit">
<input type="submit" id="submit" name="submit" value="Send Message" />
</div><!-- end .submit-->
</form>
<?php else: ?>
<p style="font-size:25px; font-family:Arial, Helvetica, sans-serif; color:#255E67; margin-left:25px;">Thank you for your Message!</p>
<script type="text/javascript">
setTimeout('ourRedirect()', 5000)
funtion ourRedirect(){
location.href='contact.html'
</script>
<?php endif; ?>
</div><!-- end #form-->
</div>
<p> </p>
<!-- end formwrap -->
</body>
</html> -
How Can I Turn A Software Loop Into A Real Instrument Loop?
My primary reason for wondering about this is that one of my songs requires a windchime sound throughout...but not too much of one. Just a touch of windchimes. The Orchestra Kit has a few pretty good windchime sounds BUT the natural sustain is too long for what I want. If figure I can get my wisp of a windchime if I can convert my miniscule software loop into a real instrument loop then whittle it down to the sound I want.
How can I make this conversion?Well, Hangtime...You were absolutely right (again!) about messing around with the notes preferred over dissecting them.
I got an absolutely gorgeous windchime sound from applying a couple of carefully auditioned filters and then messing around with the volume at the end of each note. It actually turned out better than I had imagined. It turned out so very nice that I gave it a well spaced looping rhythm and now the windchime is throughout the entire song and the song is better for it.
My dissection effort didn't get a natural sounding windchime effect at all. I trashed it almost immediately.
hugs -
How can I make the execution of my script faster
Hi everyone
How can I make the execution of my script faster, because it takes a lot of time to execute? The following is my script:
DECLARE
CURSOR C1 IS
SELECT A.ITEM_CODE,A.STORE_CODE,ST_UNIT,SA_UNIT,CART_QTY,QUANTITY_ON_HAND
FROM PROJ.IM_LOCATION A
WHERE A.ITEM_CODE BETWEEN :ITEM_FRM AND :ITEM_TO
AND A.STORE_CODE = :FRM_STORE
ORDER BY
A.STORE_CODE ;
CURSOR C2 IS
SELECT A.ITEM_CODE,A.STORE_CODE,ST_UNIT,SA_UNIT,CART_QTY,QUANTITY_ON_HAND
FROM PROJ.IM_LOCATION A
WHERE A.ITEM_CODE BETWEEN :ITEM_FRM AND :ITEM_TO
AND A.STORE_CODE = :FRM_STORE
ORDER BY
A.STORE_CODE ;
big_syb_qty_issue number(12,3);
small_syb_qty_issue number(12,3);
big_issue number(12,3);
small_issue number(12,3);
item_syb_code varchar2(30);
big_syb_qty_rec number(12,3);
small_syb_qty_rec number(12,3);
BI_SUPP_REC number(12,3);
SM_SUPP_REC number(12,3);
big_syb_qty_ADJ number(12,3);
small_syb_qty_ADJ number(12,3);
big_ADJ number(12,3);
small_ADJ number(12,3);
big_syb_qty_rec_iner number(12,3);
small_syb_qty_rec_iner number(12,3);
BI_INTER number(12,3);
SM_INTER number(12,3);
cl_big_qty number(12,3);
cl_small_qty number(12,3);
cl_big_qty1 number(12,3);
cl_small_qty1 number(12,3);
BIG_QTY_OPEN number(12,3);
SMALL_QTY_OPEN number(12,3);
BEGIN
IF ((:FRM_STORE IS NULL) OR (:ITEM_FRM IS NULL) OR (:ITEM_TO IS NULL) OR (:DATE_FRM IS NULL)) THEN
SHOW_MESSAGE('You Should Enter the Parameters Values Correctly Please try again !!!! ');
RAISE FORM_TRIGGER_FAILURE;
GO_FIELD('DATE_FRM');
END IF;
DELETE FROM STOCK_AT_DATE_REP2;
COMMIT;
cl_big_qty := 0;
cl_small_qty := 0;
-- MESSAGE('Please Wait The System Calculating The Transactions !!!');
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'BUSY');
FOR R IN C1
LOOP
cl_big_qty := R.CART_QTY ;
cl_small_qty := R.QUANTITY_ON_HAND;
-- Transerfer Data 1
BEGIN
SELECT B.ITEM_CODE,SUM(NVL(CART_QTY,0)) ,SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,big_syb_qty_issue,small_syb_qty_issue
FROM IM_TRANS_ISSUE_HEADER A,IM_TRANS_ISSUE_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND B.DEL_STORE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE > :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('ISSUED BIG'||' '||big_syb_qty_issue);
exception
when no_data_found then big_syb_qty_issue := 0;
small_syb_qty_issue := 0;
when others then MESSAGE(10,sqlerrm);
END ;
-- Goods Received Data From Supplier 1
BEGIN
SELECT B.ITEM_CODE,SUM(B.CART_QTY),SUM(ITEM_QUANTITY)
INTO item_syb_code,big_syb_qty_rec,small_syb_qty_rec
FROM IM_GOODS_RECIEVE_HEADER A,IM_GOODS_RECIEVE_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND STORE_CODE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE > :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('RECEIVED FROM SUPPLIER BIG'||' '||big_syb_qty_rec);
exception
when no_data_found then big_syb_qty_rec := 0;
small_syb_qty_rec := 0;
when others then message(10,sqlerrm);
END ;
-- Adjustement Data 1
BEGIN
SELECT B.ITEM_CODE ,SUM(NVL(CART_QTY,0)) ADJUST_QTY,SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,big_syb_qty_ADJ,small_syb_qty_ADJ
FROM IM_ADJUST_HEADER A,IM_ADJUST_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND B.STORE_CODE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND A.DOC_DATE > :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('Adjust BIG'||' '||big_syb_qty_ADJ);
exception
when no_data_found then big_syb_qty_ADJ := 0;
small_syb_qty_ADJ := 0;
when others then message(10,sqlerrm);
END ;
-- Goods Received Data From Stores 1
BEGIN
SELECT B.ITEM_CODE,SUM(B.CART_QTY),SUM(ITEM_QUANTITY)
INTO item_syb_code,big_syb_qty_rec_iner,small_syb_qty_rec_iner
FROM IM_TRANS_REC_HEADER A,IM_TRANS_REC_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND REC_STORE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE > :DATE_TO
GROUP BY
B.ITEM_CODE;
-- show_message('here');
-- SHOW_MESSAGE('Received From Stores BIG'||' '||big_syb_qty_rec_iner);
exception
when no_data_found then
big_syb_qty_rec_iner := 0;
small_syb_qty_rec_iner := 0;
when others then message(10,sqlerrm);
END ;
cl_big_qty := (NVL(cl_big_qty,0) + NVL(big_syb_qty_issue,0));
cl_big_qty := (NVL(cl_big_qty,0) - NVL(big_syb_qty_rec,0));
cl_big_qty := (NVL(cl_big_qty,0) - NVL(big_syb_qty_rec_iner,0));
big_syb_qty_ADJ := -1 * NVL(big_syb_qty_ADJ,0);
cl_big_qty := (NVL(cl_big_qty,0) + NVL(big_syb_qty_ADJ,0));
-- srw.message(2000,'cl_small_qty'||cl_small_qty);
cl_small_qty := (NVL(cl_small_qty,0) + NVL(small_syb_qty_issue,0));
cl_small_qty := (NVL(cl_small_qty,0) - NVL(small_syb_qty_rec,0));
cl_small_qty := (NVL(cl_small_qty,0) - NVL(small_syb_qty_rec_iner,0));
small_syb_qty_ADJ := -1 * NVL(small_syb_qty_ADJ,0);
cl_small_qty := (NVL(cl_small_qty,0) + NVL(small_syb_qty_ADJ,0));
-- srw.message(2000,'cl_small_qty'||cl_small_qty); srw.message(2000,'cl_small_qty'||cl_small_qty);
INSERT INTO STOCK_AT_DATE_REP2
VALUES(R.STORE_CODE,R.ITEM_CODE,cl_big_qty,cl_small_qty,R.ST_UNIT,R.SA_UNIT,:DATE_FRM,
:DATE_TO,0,0,0,0,0,0,0,0,cl_big_qty,cl_small_qty);
cl_big_qty := 0;
cl_small_qty := 0;
END LOOP;
COMMIT;
FOR R IN C2
LOOP
-- Transerfer Data 2
BEGIN
SELECT B.ITEM_CODE,SUM(NVL(CART_QTY,0)) ,SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,big_issue,small_issue
FROM IM_TRANS_ISSUE_HEADER A,IM_TRANS_ISSUE_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND B.DEL_STORE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE BETWEEN :DATE_FRM AND :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('ISSUED BIG'||' '||big_syb_qty_issue);
exception
when no_data_found then
big_issue := 0;
small_issue := 0;
when others then MESSAGE(10,sqlerrm);
END ;
-- Goods Received Data From Supplier 2
BEGIN
SELECT B.ITEM_CODE,SUM(NVL(B.CART_QTY,0)),SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,BI_SUPP_REC,SM_SUPP_REC
FROM IM_GOODS_RECIEVE_HEADER A,IM_GOODS_RECIEVE_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND STORE_CODE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE BETWEEN :DATE_FRM AND :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('1- SM_SUPP_REC '||' '||SM_SUPP_REC );
-- SHOW_MESSAGE('RECEIVED FROM SUPPLIER BIG'||' '||big_syb_qty_rec);
exception
when no_data_found then
BI_SUPP_REC := 0;
SM_SUPP_REC := 0;
when others then message(10,sqlerrm);
END ;
-- Adjustement Data 2
BEGIN
SELECT B.ITEM_CODE ,SUM(NVL(CART_QTY,0)) ADJUST_QTY,SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,big_ADJ,small_ADJ
FROM IM_ADJUST_HEADER A,IM_ADJUST_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND B.STORE_CODE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND A.DOC_DATE BETWEEN :DATE_FRM AND :DATE_TO
GROUP BY
B.ITEM_CODE;
-- SHOW_MESSAGE('Adjust BIG'||' '||big_syb_qty_ADJ);
exception
when no_data_found then
big_ADJ := 0;
small_ADJ := 0;
when others then message(10,sqlerrm);
END ;
-- Goods Received Data From Stores 2
BEGIN
SELECT B.ITEM_CODE,SUM(NVL(B.CART_QTY,0)),SUM(NVL(ITEM_QUANTITY,0))
INTO item_syb_code,BI_INTER,SM_INTER
FROM IM_TRANS_REC_HEADER A,IM_TRANS_REC_DETAILS B
WHERE A.DOC_CODE = B.DOC_CODE
AND REC_STORE = R.STORE_CODE
AND ITEM_CODE = R.ITEM_CODE
AND DOC_DATE BETWEEN :DATE_FRM AND :DATE_TO
GROUP BY
B.ITEM_CODE;
-- show_message('here');
-- SHOW_MESSAGE('Received From Stores BIG'||' '||big_syb_qty_rec_iner);
exception
when no_data_found then
BI_INTER := 0;
SM_INTER := 0;
when others then message(10,sqlerrm);
END ;
BEGIN
BIG_QTY_OPEN := 0;
SMALL_QTY_OPEN := 0;
BEGIN
SELECT NVL(S_BIG_QTY_OPEN,0) ,NVL(S_SMALL_QTY_OPEN,0)
INTO
BIG_QTY_OPEN,SMALL_QTY_OPEN
FROM STOCK_AT_DATE_REP2
WHERE S_STORE_CODE = R.STORE_CODE
AND S_ITEM_CODE = R.ITEM_CODE;
END;
BIG_QTY_OPEN := ((BIG_QTY_OPEN) + NVL(big_issue,0));
BIG_QTY_OPEN := ((BIG_QTY_OPEN) - NVL(BI_SUPP_REC,0));
big_adj := -1 * NVL(big_adj,0);
BIG_QTY_OPEN := ((BIG_QTY_OPEN) + NVL(big_adj,0));
BIG_QTY_OPEN := ((BIG_QTY_OPEN) - NVL(BI_INTER,0));
SMALL_QTY_OPEN := ((SMALL_QTY_OPEN) + NVL(SMALL_issue,0));
SMALL_QTY_OPEN := ((SMALL_QTY_OPEN) - NVL(SM_SUPP_REC ,0));
SMALL_adj := -1 * NVL(SMALL_adj,0);
SMALL_QTY_OPEN := ((SMALL_QTY_OPEN) + NVL(SMALL_adj,0));
SMALL_QTY_OPEN := ((SMALL_QTY_OPEN) - NVL(SM_INTER,0));
END;
BEGIN
UPDATE STOCK_AT_DATE_REP2
SET BIG_SUP_REC = BI_SUPP_REC,
SMALL_SUP_REC = SM_SUPP_REC,
BIG_ISSUE_TRAN = big_issue,
SMALL_ISSUE_TRAN = SMALL_issue,
BIG_ADJUST = big_adj,
SMALL_ADJUST = SMALL_adj,
BIG_INTER_REC = BI_INTER,
SMALL_INTER_REC = SM_INTER,
S_BIG_QTY_OPEN = BIG_QTY_OPEN,
S_SMALL_QTY_OPEN = SMALL_QTY_OPEN
WHERE S_STORE_CODE = R.STORE_CODE
AND S_ITEM_CODE = R.ITEM_CODE;
exception
when no_data_found then
NULL;
when others then
message(10,sqlerrm);
END;
END LOOP;
COMMIT;
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'default');
SYNCHRONIZE;
-- SHOW_MESSAGE('The Data Have Been Calculated !!!');
END;
declare
pl_id ParamList;
APPLICATION_ID VARCHAR2(20):='PRD';
COMMAND_LINE VARCHAR2(100) :='STOCK_LEDGER';
BEGIN
pl_id := Get_Parameter_List('tmpdata');
IF NOT Id_Null(pl_id) THEN
Destroy_Parameter_List( pl_id );
END IF;
pl_id := Create_Parameter_List('tmpdata');
Add_Parameter(pl_id,'DATE_FRM',TEXT_PARAMETER,:DATE_FRM);
Add_Parameter(pl_id,'DATE_TO',TEXT_PARAMETER,:DATE_TO);
Add_Parameter(pl_id,'ITEM_FRM',TEXT_PARAMETER,:ITEM_FRM);
Add_Parameter(pl_id,'ITEM_TO',TEXT_PARAMETER,:ITEM_TO);
Add_Parameter(pl_id,'FRM_STORE',TEXT_PARAMETER,:FRM_STORE);
IF :REPORT_TYPE = 1 THEN
Run_Product(REPORTS,'C:\INV\RDF\STOCK_LEDGER.rdf',SYNCHRONOUS,RUNTIME,
FILESYSTEM, pl_id,NULL);
ELSIF :REPORT_TYPE = 2 THEN
Run_Product(REPORTS,'C:\INV\RDF\STOCK_LEDGER_2.rdf',SYNCHRONOUS,RUNTIME,
FILESYSTEM, pl_id,NULL);
END IF;
END;
Waiting for your valuable answer
Best Regards
Jamil AlshaibaniMake a matte in Photoshop.
From the Photoshop menu bar: File > New > Film & Video Presets. Choose one that suits your FCP project pixel dimensions. Make the background black. Place a white rectangle with rounded corners on top (the white will determine how much of your picture is visible). Flatten Image. Save as TIFF. Import into FCP.
Move your video clips up to V2. Place the imported TIFF on V1. Highlight all clips on V2.
Go to Modify > Composite Mode > Travel Matte Luma. Done.
If you want soft edges, no need for a matte. Double click your clip to place it in the Viewer. Open up the Motion tab > Crop > Edge Feather. Nice and quick. Copy and Paste attributes for the other clips. -
How can i make the optimiser to skip this full table scan ??
Hi,
I am trying to tune the below query, I have checked up all the possibilities to skip the full table scan on vhd_calldesh_archive, But am unable to find the predicate in the where clause, which is letting the optimiser to choose the full table scan on vhd_calldesk_archive table, which is very large one. how can i make the optimiser to skip this full table scan.
Please check the below sql script and explain plan ,
SELECT a.call_id, a.entry_date,
NVL (INITCAP (b.full_name), caller_name) AS caller_name,
c.description AS org_desc, a.env_id, i.env_desc, a.appl_id,
d.appl_desc, a.module_id, e.module_desc, a.call_type_id,
f.call_type_desc, a.priority, a.upduserid,
INITCAP (g.full_name) AS lastupdated_username, a.call_desc, h.mode_desc,
a.received_time,a.assignment_team, a.status,
ROUND (lcc.pkg_com.fn_datediff ('MI',
a.entry_date,
a.status_date
) AS elapsed_time,
ROUND (lcc.pkg_com.fn_datediff ('MI',
a.entry_date,
a.status_date
) AS resolved_min,
CASE
WHEN a.orgid in (1,100,200) THEN a.orgid
ELSE j.regionorgid
END AS region
,(SELECT coalesce(MAX(upddate),a.upddate) FROM lcc.vhd_callstatus stat WHERE stat.call_id = a.call_id
) as stat_upddate
,(SELECT team_desc from lcc.vhd_teams t where t.team_id = a.assignment_team) as team_desc
,a.eta_date
,coalesce(a.caller_contact, b.telephone) AS caller_contact
,coalesce(a.caller_email, b.email) as email
,a.affected_users
,a.outage_time
,a.QA_DONE
,a.LAST_ACTION_TEAM
,a.LAST_ACTION_USER
,INITCAP (k.full_name) AS last_action_username
,a.last_action_date
,l.team_desc as last_action_teamdesc
,a.refid
,INITCAP (lu.full_name) AS logged_name
,a.pmreview
,a.status as main_status
FROM lcc.vhd_calldesk_archive a
LEFT OUTER JOIN lcc.lcc_userinfo_details b ON b.user_name = a.caller_id
INNER JOIN lcc.com_organization c ON c.code = a.orgid
INNER JOIN lcc.vhd_applications d ON d.appl_id = a.appl_id
INNER JOIN lcc.vhd_modules e ON e.appl_id = a.appl_id AND e.module_id = a.module_id
INNER JOIN lcc.vhd_calltypes f ON f.call_type_id = a.call_type_id
INNER JOIN lcc.com_rptorganization j ON j.orgid = a.orgid AND j.tree = 'HLPDK'
LEFT OUTER JOIN lcc.lcc_userinfo_details g ON g.user_name = a.upduserid
LEFT OUTER JOIN lcc.vhd_callmode h ON h.mode_id = a.mode_id
LEFT OUTER JOIN lcc.vhd_environment i ON i.appl_id = a.appl_id AND i.env_id = a.env_id
LEFT OUTER JOIN lcc.lcc_userinfo_details k ON k.user_name = a.last_action_user
LEFT OUTER JOIN lcc.vhd_teams l ON l.team_id = a.last_action_user
LEFT OUTER JOIN (select CALL_ID,upduserid FROM lcc.VHD_CALLDESK_HISTORY P where upddate
in ( select min(upddate) from lcc.VHD_CALLDESK_HISTORY Q WHERE Q.CALL_ID = P.CALL_ID
group by call_id)) ku
ON ku.call_id = a.call_id
LEFT OUTER JOIN lcc.lcc_userinfo_details lu ON NVL(ku.upduserid,A.upduserid) = lu.user_name;
| Id | Operation | Name | Rows | Bytes | Cost |
| 0 | SELECT STATEMENT | | 2104 | 3667K| 37696 |
| 1 | UNION-ALL | | | | |
| 2 | NESTED LOOPS OUTER | | 2103 | 3665K| 37683 |
| 3 | VIEW | | 2103 | 3616K| 35580 |
| 4 | NESTED LOOPS OUTER | | 2103 | 823K| 35580 |
| 5 | NESTED LOOPS OUTER | | 2103 | 774K| 33477 |
| 6 | NESTED LOOPS OUTER | | 2103 | 685K| 31374 |
| 7 | NESTED LOOPS | | 2103 | 636K| 29271 |
| 8 | NESTED LOOPS | | 2103 | 603K| 27168 |
| 9 | NESTED LOOPS OUTER | | 2103 | 558K| 25065 |
| 10 | NESTED LOOPS OUTER | | 2103 | 515K| 22962 |
| 11 | NESTED LOOPS | | 2103 | 472K| 20859 |
| 12 | NESTED LOOPS | | 2103 | 429K| 18756 |
| 13 | NESTED LOOPS OUTER | | 4826 | 890K| 13930 |
| 14 | NESTED LOOPS OUTER | | 4826 | 848K| 9104 |
| 15 | NESTED LOOPS | | 4826 | 754K| 4278 |
|* 16 | TABLE ACCESS FULL | COM_RPTORGANIZATION | 75 | 1050 | 3 |
| 17 | TABLE ACCESS BY INDEX ROWID | VHD_CALLDESK | 64 | 9344 | 57 |
|* 18 | INDEX RANGE SCAN | VHD_CALLDSK_ORGID | 2476 | | 7 |
| 19 | VIEW PUSHED PREDICATE | | 1 | 20 | 1 |
|* 20 | FILTER | | | | |
| 21 | TABLE ACCESS BY INDEX ROWID | VHD_CALLDESK_HISTORY | 1 | 20 | 2 |
|* 22 | INDEX RANGE SCAN | VHD_CALLDSK_HIST_CALLID_IDX | 1 | | 1 |
|* 23 | FILTER | | | | |
| 24 | SORT GROUP BY NOSORT | | 1 | 12 | 2 |
| 25 | TABLE ACCESS BY INDEX ROWID | VHD_CALLDESK_HISTORY | 1 | 12 | 2 |
|* 26 | INDEX RANGE SCAN | VHD_CALLDSK_HIST_CALLID_IDX | 1 | | 1 |
| 27 | TABLE ACCESS BY INDEX ROWID | VHD_CALLMODE | 1 | 9 | 1 |
|* 28 | INDEX UNIQUE SCAN | VHD_CALLMOD_MODID_PK | 1 | | |
| 29 | TABLE ACCESS BY INDEX ROWID | VHD_APPLICATIONS | 1 | 20 | 1 |
|* 30 | INDEX UNIQUE SCAN | VHD_APPL_APPLID_PK | 1 | | |
| 31 | TABLE ACCESS BY INDEX ROWID | VHD_CALLTYPES | 1 | 21 | 1 |
|* 32 | INDEX UNIQUE SCAN | VHD_CALLTYP_ID_PK | 1 | | |
| 33 | TABLE ACCESS BY INDEX ROWID | VHD_TEAMS | 1 | 21 | 1 |
|* 34 | INDEX UNIQUE SCAN | VHD_TEAMID_PK | 1 | | |
| 35 | TABLE ACCESS BY INDEX ROWID | VHD_ENVIRONMENT | 1 | 21 | 1 |
|* 36 | INDEX UNIQUE SCAN | VHD_ENV_APLENVID_PK | 1 | | |
| 37 | TABLE ACCESS BY INDEX ROWID | VHD_MODULES | 1 | 22 | 1 |
|* 38 | INDEX UNIQUE SCAN | VHD_MOD_APLMOD_ID_PK | 1 | | |
| 39 | TABLE ACCESS BY INDEX ROWID | COM_ORGANIZATION | 1 | 16 | 1 |
|* 40 | INDEX UNIQUE SCAN | COM_ORG_PK | 1 | | |
| 41 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 |
|* 42 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 43 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 43 |
|* 44 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 45 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 | 1
|* 46 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 47 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 | 1
|* 48 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 49 | NESTED LOOPS OUTER | | 1 | 1785 | 13 |
| 50 | VIEW | | 1 | 1761 | 12 |
| 51 | NESTED LOOPS OUTER | | 1 | 1656 | 12 |
| 52 | NESTED LOOPS OUTER | | 1 | 1632 | 11 |
| 53 | NESTED LOOPS OUTER | | 1 | 1608 | 10 |
| 54 | NESTED LOOPS | | 1 | 1565 | 9 |
| 55 | NESTED LOOPS | | 1 | 1549 | 9 |
| 56 | NESTED LOOPS | | 1 | 1535 | 9 |
| 57 | NESTED LOOPS OUTER | | 1 | 1513 | 8 |
| 58 | NESTED LOOPS OUTER | | 1 | 1492 | 7 |
| 59 | NESTED LOOPS | | 1 | 1471 | 6 |
| 60 | NESTED LOOPS | | 1 | 1450 | 5 |
| 61 | NESTED LOOPS OUTER | | 1 | 1430 | 4 |
| 62 | NESTED LOOPS OUTER | | 1 | 1421 | 3 |
| 63 | TABLE ACCESS FULL | VHD_CALLDESK_ARCHIVE | 1 | 1401 | 2 |
| 64 | VIEW PUSHED PREDICATE | | 1 | 20 | 1 |
|* 65 | FILTER | | | | |
| 66 | TABLE ACCESS BY INDEX ROWID | VHD_CALLDESK_HISTORY | 1 | 20 | 2 |
|* 67 | INDEX RANGE SCAN | VHD_CALLDSK_HIST_CALLID_IDX | 1 | | 1 |
|* 68 | FILTER | | | | |
| 69 | SORT GROUP BY NOSORT | | 1 | 12 | 2 |
| 70 | TABLE ACCESS BY INDEX ROWID| VHD_CALLDESK_HISTORY | 1 | 12 | 2 |
|* 71 | INDEX RANGE SCAN | VHD_CALLDSK_HIST_CALLID_IDX | 1 | | 1 |
| 72 | TABLE ACCESS BY INDEX ROWID | VHD_CALLMODE | 1 | 9 | 1 |
|* 73 | INDEX UNIQUE SCAN | VHD_CALLMOD_MODID_PK | 1 | | |
| 74 | TABLE ACCESS BY INDEX ROWID | VHD_APPLICATIONS | 1 | 20 | 1 |
|* 75 | INDEX UNIQUE SCAN | VHD_APPL_APPLID_PK | 1 | | |
| 76 | TABLE ACCESS BY INDEX ROWID | VHD_CALLTYPES | 1 | 21 | 1 |
|* 77 | INDEX UNIQUE SCAN | VHD_CALLTYP_ID_PK | 1 | | |
| 78 | TABLE ACCESS BY INDEX ROWID | VHD_TEAMS | 1 | 21 | 1 |
|* 79 | INDEX UNIQUE SCAN | VHD_TEAMID_PK | 1 | | |
| 80 | TABLE ACCESS BY INDEX ROWID | VHD_ENVIRONMENT | 1 | 21 | 1 |
|* 81 | INDEX UNIQUE SCAN | VHD_ENV_APLENVID_PK | 1 | | |
| 82 | TABLE ACCESS BY INDEX ROWID | VHD_MODULES | 1 | 22 | 1 |
|* 83 | INDEX UNIQUE SCAN | VHD_MOD_APLMOD_ID_PK | 1 | | |
| 84 | TABLE ACCESS BY INDEX ROWID | COM_RPTORGANIZATION | 1 | 14 | |
|* 85 | INDEX UNIQUE SCAN | COM_RPTORG_PK | 1 | | |
| 86 | TABLE ACCESS BY INDEX ROWID | COM_ORGANIZATION | 1 | 16 | |
|* 87 | INDEX UNIQUE SCAN | COM_ORG_PK | 1 | | |
| 88 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 43 |
|* 89 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 90 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 |
|* 91 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 92 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 | 1
|* 93 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
| 94 | TABLE ACCESS BY INDEX ROWID | LCC_USERINFO_DETAILS | 1 | 24 | 1
|* 95 | INDEX UNIQUE SCAN | LCCUSERINFOIND | 1 | | |
Predicate Information (identified by operation id):
16 - filter("J"."TREE"='HLPDK')
18 - access("J"."ORGID"="A"."ORGID")
20 - filter( EXISTS (SELECT /*+ */ 0 FROM "LCC"."VHD_CALLDESK_HISTORY" "Q" WHERE "Q"."CALL_ID"=:B1
"Q"."CALL_ID" HAVING MIN("Q"."UPDDATE")=:B2))
22 - access("SYS_ALIAS_2"."CALL_ID"="A"."CALL_ID")
23 - filter(MIN("Q"."UPDDATE")=:B1)
26 - access("Q"."CALL_ID"=:B1)
28 - access("H"."MODE_ID"(+)="A"."MODE_ID")
30 - access("D"."APPL_ID"="A"."APPL_ID")
32 - access("F"."CALL_TYPE_ID"="A"."CALL_TYPE_ID")
34 - access("L"."TEAM_ID"(+)="A"."LAST_ACTION_TEAM")
36 - access("I"."APPL_ID"(+)="A"."APPL_ID" AND "I"."ENV_ID"(+)="A"."ENV_ID")
38 - access("E"."APPL_ID"="A"."APPL_ID" AND "E"."MODULE_ID"="A"."MODULE_ID")
40 - access("C"."CODE"="A"."ORGID")
42 - access("K"."USER_NAME"(+)="A"."LAST_ACTION_USER")
44 - access("B"."USER_NAME"(+)="A"."CALLER_ID")
46 - access("G"."USER_NAME"(+)="A"."UPDUSERID")
48 - access("LU"."USER_NAME"(+)=NVL("SYS_ALIAS_4"."UPDUSERID_162","SYS_ALIAS_4"."UPDUSERID_25"))
65 - filter( EXISTS (SELECT /*+ */ 0 FROM "LCC"."VHD_CALLDESK_HISTORY" "Q" WHERE "Q"."CALL_ID"=:B1
"Q"."CALL_ID" HAVING MIN("Q"."UPDDATE")=:B2))
67 - access("SYS_ALIAS_2"."CALL_ID"="SYS_ALIAS_1"."CALL_ID")
68 - filter(MIN("Q"."UPDDATE")=:B1)
71 - access("Q"."CALL_ID"=:B1)
73 - access("H"."MODE_ID"(+)="SYS_ALIAS_1"."MODE_ID")
75 - access("D"."APPL_ID"="SYS_ALIAS_1"."APPL_ID")
77 - access("F"."CALL_TYPE_ID"="SYS_ALIAS_1"."CALL_TYPE_ID")
79 - access("L"."TEAM_ID"(+)=TO_NUMBER("SYS_ALIAS_1"."LAST_ACTION_USER"))
81 - access("I"."APPL_ID"(+)="SYS_ALIAS_1"."APPL_ID" AND "I"."ENV_ID"(+)="SYS_ALIAS_1"."ENV_ID")
83 - access("E"."APPL_ID"="SYS_ALIAS_1"."APPL_ID" AND "E"."MODULE_ID"="SYS_ALIAS_1"."MODULE_ID")
85 - access("SYS_ALIAS_1"."ORGID"="J"."ORGID" AND "J"."TREE"='HLPDK')
87 - access("C"."CODE"="SYS_ALIAS_1"."ORGID")
89 - access("B"."USER_NAME"(+)="SYS_ALIAS_1"."CALLER_ID")
91 - access("SYS_ALIAS_1"."UPDUSERID"="G"."USER_NAME"(+))
93 - access("K"."USER_NAME"(+)="SYS_ALIAS_1"."LAST_ACTION_USER")
95 - access("LU"."USER_NAME"(+)=NVL("SYS_ALIAS_3"."UPDUSERID_162","SYS_ALIAS_3"."UPDUSERID_25"))
Note: cpu costing is offI've tried to look thru your sql and changed it a bit. Of course not testet :-)
Your problem isn't the archive table! I tried to remove the 2 selects from the select-clause. Furthermore you have a lot of nested loops in your explain, which is a performance-killer. Try getting rid of them, perhaps use /*+ USE_HASH(?,?) */.
SELECT a.call_id, a.entry_date,
NVL (INITCAP (b.full_name), caller_name) AS caller_name, c.description AS org_desc, a.env_id, i.env_desc, a.appl_id,
d.appl_desc, a.module_id, e.module_desc, a.call_type_id, f.call_type_desc, a.priority, a.upduserid,
INITCAP (g.full_name) AS lastupdated_username, a.call_desc, h.mode_desc, a.received_time, a.assignment_team, a.status,
ROUND (lcc.pkg_com.fn_datediff ('MI', a.entry_date, a.status_date)) AS elapsed_time,
ROUND (lcc.pkg_com.fn_datediff ('MI', a.entry_date, a.status_date)) AS resolved_min,
CASE
WHEN a.orgid IN (1, 100, 200)
THEN a.orgid
ELSE j.regionorgid
END AS region,
COALESCE (stat.upddate, a.upddate) AS stat_upddate,
t.team_desc, a.eta_date,
COALESCE (a.caller_contact, b.telephone) AS caller_contact,
COALESCE (a.caller_email, b.email) AS email, a.affected_users,
a.outage_time, a.qa_done, a.last_action_team, a.last_action_user,
INITCAP (k.full_name) AS last_action_username, a.last_action_date,
l.team_desc AS last_action_teamdesc, a.refid,
INITCAP (lu.full_name) AS logged_name, a.pmreview,
a.status AS main_status
FROM lcc.vhd_calldesk_archive a, lcc.lcc_userinfo_details b, lcc.com_organization c,
lcc.vhd_applications d, lcc.vhd_modules e, lcc.vhd_calltypes f, lcc.com_rptorganization j,
lcc.lcc_userinfo_details g, lcc.vhd_callmode h, lcc.vhd_environment i, lcc.lcc_userinfo_details k,
lcc.vhd_teams l,
(SELECT call_id, upduserid
FROM lcc.vhd_calldesk_history p
WHERE upddate IN (SELECT MIN (upddate)
FROM lcc.vhd_calldesk_history q
WHERE q.call_id = p.call_id
GROUP BY call_id)) ku,
lcc.lcc_userinfo_details lu,
(SELECT call_id, MAX (upddate)
FROM lcc.vhd_callstatus
GROUP BY call_id) stat,
lcc.vhd_teams t
WHERE a.caller_id = b.user_name(+)
AND a.orgid = c.code
AND a.appl_id = d.appl_id
AND a.appl_id = e.appl_id
AND a.module_id = e.module_id
AND a.call_type_id = f.call_type_id
AND a.orgid = j.orgid
AND j.tree = 'HLPDK'
AND a.upduserid = g.user_name(+)
AND a.mode_id = h.mode_id(+)
AND a.appl_id = i.appl_id(+)
AND a.env_id = i.env_id(+)
AND a.last_action_user = k.user_name(+)
AND a.last_action_user = l.team_id(+)
AND a.call_id = ku.call_id(+)
AND NVL (ku.upduserid, a.upduserid) = lu.user_name(+)
AND a.call_id = stat.call_id
AND a.assignment_team = t.team_id; -
How can i make the text go vertically in numbers
How can I make the text vertical in numbers? I have merged the cells and cannot find an option for making it go vertical as opposed to horizontal.
I already gave two tools to fit this kind of needs.
tip #1 :
--{code}
--[SCRIPT write_vertically]
Enregistrer le script en tant que Script : write_vertically.scpt
déplacer le fichier ainsi créé dans le dossier
<VolumeDeDémarrage>:Utilisateurs:<votreCompte>:Bibliothèque:Scripts:Applications :Numbers:
Il vous faudra peut-être créer le dossier Numbers et peut-être même le dossier Applications.
Saisir dans une cellule le mot à écrire verticalement puis le sélectionner.
ATTENTION, il ne faut pas sélectionner la cellule mais le mot qui doit apparaitre surligné.
Aller au menu Scripts , choisir Numbers puis choisir “write_vertically”
Le script colle dans la cellule le mot apès avoir inséré un return entre tous les caractères.
Pour mon usage personnel j'associe un raccourci à ce script grace à FastScripts.
--=====
L’aide du Finder explique:
L’Utilitaire AppleScript permet d’activer le Menu des scripts :
Ouvrez l’Utilitaire AppleScript situé dans le dossier Applications/AppleScript.
Cochez la case “Afficher le menu des scripts dans la barre de menus”.
Sous 10.6.x,
aller dans le panneau “Général” du dialogue Préférences de l’Éditeur Applescript
puis cocher la case “Afficher le menu des scripts dans la barre des menus”.
--=====
Save the script as a Script: write_vertically.scpt
Move the newly created file into the folder:
<startup Volume>:Users:<yourAccount>:Library:Scripts:Applications:Numbers:
Maybe you would have to create the folder Numbers and even the folder Applications by yourself.
In a cell, type a word to write vertically then select it.
CAUTION, don’t select the cell but the word which must be highlighted.
Go to the Scripts Menu, choose Numbers, then choose “write_vertically”
The script insert in the cell the word after inserting a return between every characters.
For my own use, I link a shortcut to the script thank to FastScripts.
--=====
The Finder’s Help explains:
To make the Script menu appear:
Open the AppleScript utility located in Applications/AppleScript.
Select the “Show Script Menu in menu bar” checkbox.
Under 10.6.x,
go to the General panel of AppleScript Editor’s Preferences dialog box
and check the “Show Script menu in menu bar” option.
--=====
Yvan KOENIG (VALLAURIS, France)
2011/12/17
2012/01/01 no longer use a local variable, use result
--=====
on run
Clear the clipboard *)
set the clipboard to ""
Copy the selection in the clipboard *)
my raccourci("Numbers", "c", "c")
Loop waiting that the clipboard is really filled *)
repeat
try
if (the clipboard as text) is not "" then exit repeat
on error
end try
end repeat
Extract the clipboard's content *)
the clipboard as text
Insert return between every characters *)
my recolle(every character of result, return)
Fill the clipboard with the edited string *)
set the clipboard to result
Paste in the cell *)
my raccourci("Numbers", "v", "cas")
end run
--=====
on recolle(l, d)
local oTIDs, t
set oTIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to d
set t to l as text
set AppleScript's text item delimiters to oTIDs
return t
end recolle
--=====
on activateGUIscripting()
(* to be sure than GUI scripting will be active *)
tell application "System Events"
if not (UI elements enabled) then set (UI elements enabled) to true
end tell
end activateGUIscripting
--=====
==== Uses GUIscripting ====
This handler may be used to 'type' text, invisible characters if the third parameter is an empty string.
It may be used to 'type' keyboard raccourcis if the third parameter describe the required modifier keys.
I changed its name « shortcut » to « raccourci » to get rid of a name conflict in Smile.
on raccourci(a, t, d)
local k
tell application a to activate
tell application "System Events" to tell application process a
set frontmost to true
try
t * 1
if d is "" then
key code t
else if d is "c" then
key code t using {command down}
else if d is "a" then
key code t using {option down}
else if d is "k" then
key code t using {control down}
else if d is "s" then
key code t using {shift down}
else if d is in {"ac", "ca"} then
key code t using {command down, option down}
else if d is in {"as", "sa"} then
key code t using {shift down, option down}
else if d is in {"sc", "cs"} then
key code t using {command down, shift down}
else if d is in {"kc", "ck"} then
key code t using {command down, control down}
else if d is in {"ks", "sk"} then
key code t using {shift down, control down}
else if (d contains "c") and (d contains "s") and d contains "k" then
key code t using {command down, shift down, control down}
else if (d contains "c") and (d contains "s") and d contains "a" then
key code t using {command down, shift down, option down}
end if
on error
repeat with k in t
if d is "" then
keystroke (k as text)
else if d is "c" then
keystroke (k as text) using {command down}
else if d is "a" then
keystroke k using {option down}
else if d is "k" then
keystroke (k as text) using {control down}
else if d is "s" then
keystroke k using {shift down}
else if d is in {"ac", "ca"} then
keystroke (k as text) using {command down, option down}
else if d is in {"as", "sa"} then
keystroke (k as text) using {shift down, option down}
else if d is in {"sc", "cs"} then
keystroke (k as text) using {command down, shift down}
else if d is in {"kc", "ck"} then
keystroke (k as text) using {command down, control down}
else if d is in {"ks", "sk"} then
keystroke (k as text) using {shift down, control down}
else if (d contains "c") and (d contains "s") and d contains "k" then
keystroke (k as text) using {command down, shift down, control down}
else if (d contains "c") and (d contains "s") and d contains "a" then
keystroke (k as text) using {command down, shift down, option down}
end if
end repeat
end try
end tell
end raccourci
--=====
--[/SCRIPT]
--{code}
tip #2 :
--{code}
--[SCRIPT rotate_cell_contents]
Enregistrer le script en tant que Script : rotate_cell_contents.scpt
déplacer le fichier ainsi créé dans le dossier
<VolumeDeDémarrage>:Users:<votreCompte>:Library:Scripts:Applications:Numbers:
Il vous faudra peut-être créer le dossier Numbers et peut-être même le dossier Applications.
Sélectionner une cellule dont le texte doit être tourné de 90 degrés.
Aller au menu Scripts , choisir Numbers puis choisir “rotate_cell_contents”
--=====
L’aide du Finder explique:
L’Utilitaire AppleScript permet d’activer le Menu des scripts :
Ouvrez l’Utilitaire AppleScript situé dans le dossier Applications/AppleScript.
Cochez la case “Afficher le menu des scripts dans la barre de menus”.
Sous 10.6.x,
aller dans le panneau “Général” du dialogue Préférences de l’Éditeur Applescript
puis cocher la case “Afficher le menu des scripts dans la barre des menus”.
--=====
Save the script as a Script: rotate_cell_contents.scpt
Move the newly created file into the folder:
<startup Volume>:Users:<yourAccount>:Library:Scripts:Applications:Numbers:
Maybe you would have to create the folder Numbers and even the folder Applications by yourself.
Select a cell whose contents must be rotated for 90 degrees.
Go to the Scripts Menu, choose Numbers, then choose “rotate_cell_contents”
--=====
The Finder’s Help explains:
To make the Script menu appear:
Open the AppleScript utility located in Applications/AppleScript.
Select the “Show Script Menu in menu bar” checkbox.
Under 10.6.x,
go to the General panel of AppleScript Editor’s Preferences dialog box
and check the “Show Script menu in menu bar” option.
--=====
Yvan KOENIG (VALLAURIS, France)
2011/06/23
2011/06/26 -- No longer use an auxiliary text box. Now keep the text attributes.
2012/01/31 -- edited for Lion
--=====
on run
local dName, sName, tName, rowNum1, colNum1, rowNum2, colNum2
local le_texte, la_largeur, la_hauteur, myNewDoc
my activateGUIscripting()
Extract properties of the source/target cell *)
set {dName, sName, tName, rowNum1, colNum1, rowNum2, colNum2} to my get_SelParams()
tell application "Numbers" to tell document dName to tell sheet sName to tell table tName
set selection range to range (name of column colNum1 & name of row rowNum1)
end tell
Cut*)
my raccourci("Numbers", "x", "c")
Trigger Preview *)
tell application "System Events"
if "Preview" is not in (name of every application process) then launch application "Preview"
end tell
delay 0.2 -- required
New document from the clipboard *)
my raccourci("Preview", "n", "c")
Rotate to left *)
my raccourci("Preview", "l", "c")
Copy *)
my raccourci("Preview", "c", "c")
Quit *)
my raccourci("Preview", "q", "c")
(system attribute "sys2") < 7
if result then
Click the [Don't Save] button in the warning sheet *)
tell application "Preview" to activate
tell application "System Events" to tell application process "Preview" to tell window 1
name of buttons
repeat 50 times
delay 0.1
if exists sheet 1 then exit repeat
end repeat
tell sheet 1 to click button 2
end tell
end if
Back to Numbers *)
tell application "Numbers" to tell document dName to tell sheet sName to tell table tName
-- just reset the focus on the table
end tell
Paste in the cell *)
my raccourci("Numbers", "v", "c")
end run
--=====
set { dName, sName, tName, rowNum1, colNum1, rowNum2, colNum2} to my get_SelParams()
tell application "Numbers" to tell document dName to tell sheet sName to tell table tName
on get_SelParams()
local d_name, s_name, t_name, row_num1, col_num1, row_num2, col_num2
tell application "Numbers" to tell document 1
set d_name to its name
set s_name to ""
repeat with i from 1 to the count of sheets
tell sheet i to set maybe to the count of (tables whose selection range is not missing value)
if maybe is not 0 then
set s_name to name of sheet i
exit repeat
end if -- maybe is not 0
end repeat
if s_name is "" then
if my parleAnglais() then
error "No sheet has a selected table embedding at least one selected cell !"
else
error "Aucune feuille ne contient une table ayant au moins une cellule sélectionnée !"
end if -
SSIS "XML Source Adapter" can't make XSD location an expression
I am using the "XML Source Adapter" in an SSIS package.
I notice that although you can specify the XML filename as an expression, the XSD appears to have to be a fixed file path.
This is a problem for me since the path for the XSD is different in my development than it will be in production (in production it's on drive E:, which I don't have).
I'd like to have the file location specified in the config file, but since I can't make it an expression how can I do that?
Also, since they don't have Connection Managers I can't switch DelayValidation on.
Thanks.Hi John,
Here is my pevious post
I have about 400 xml files with me and all this data has to be loaded in about 30 tables, Basically have 30 different varities of xml files and matching 30 xsd files. We were trying to load all this using "Data Flow Task" and "XML Source". Using
FOR Each Loop passing appropriate XML File and XSD to Data Flow task and load it in one shot. Rather than having 30 different Data Flow tasks. Is there any other way, we can accomplish this task using a loop and dynamically passing the different files.
You have suggested to follow the URL
There's some example code here for package generation here:
http://sqlsrvintegrationsrv.codeplex.com/releases/view/17647
Everywhere I see, they are suggesting to use Flat File or Excel data examples. Do you have any posting that can help me to use XML file as a dynamic input file for XML Source.
If anyone has any code samples how we can use XML files as dynamic source for XML Source task to import data into SQL Sever, that would be really appreciated.
Thanks -
How can I make the iPhone podcast app automatically stop playing after one episode?
How can I make the iPhone podcast app automatically stop playing after one episode?
When playing a song, are the controls at the top of the screen there? (Genius, Shuffle, Loop?)
If not, tap the center of the page once to expose them
now keep tapping the circle on the left part of the exposed controls untill a one (1) appears... -
How can I make the ipod stop itself after playing one song?
How can I make the ipod stop itself after playing one song?
When playing a song, are the controls at the top of the screen there? (Genius, Shuffle, Loop?)
If not, tap the center of the page once to expose them
now keep tapping the circle on the left part of the exposed controls untill a one (1) appears...
Maybe you are looking for
-
Is there a way to select all emails at once on the iPad and then delete them at one time?
Is there a way to select all emails at once on the iPad and then delete them at one time?
-
How to create a chart with parameter ?
hello, i would like to know if we can create a form with some parameter to fill, and when you submit, you can create a chart. Nowadays, we can create a chart with the assistant, but can we create a chart without it ?
-
I do not have a search bar in my firefox browser
I have an address bar which does not contain a search bar, how can i add search bar
-
recent i added an custom domain on my blogspot site as www.allfreeebooks.net but on my browser this site not showing as direct url . loading loading then spot that page . i can access my blogspot account , can post too . but when i try to see my page
-
Firefox opens PDF in window, not specified Foxit app
When I click on a link that specifies it's pointing to a PDF, Firefox (ver26.0) opens the PDF in a window rather than using Foxit, which I've specified in the Tools/Options list. In that PDF display window which I should not be getting, I AM presente